专题四 · 1005

来源:互联网 发布:港澳台app直播软件 编辑:程序博客网 时间:2024/05/19 22:04

代码及解释

#include <iostream>#include <stdio.h>#include <string.h>//// 连续两次莫名 AC,结果发现各种脑残手误// 变量忘记初始化就使用// 这个特别坑的地方调试了好几次才发现……int n,ans;int imap[110][110],dis[110],vis[110];inline void Prim() {  int i;  for(i = 1;i <= n; ++i) {    dis[i] = imap[1][i];    vis[i] = 0;  }  dis[1] = 0;  vis[1] = 1;  int j, k = 0, tmp;  for(i = 1; i <= n; ++i) {    tmp = 0x3f3f3f3f;    for(j = 1; j <= n; ++j)      if(!vis[j] && tmp > dis[j]) {        k = j;        tmp = dis[j];      }    if(tmp == 0x3f3f3f3f)      break;    vis[k] = 1;    ans += dis[k];    for(j = 1; j <= n; ++j)      if(!vis[j] && dis[j] > imap[k][j])        dis[j] = imap[k][j];  }}int main(){  while(~scanf("%d", &n) && n) {    int ii, jj, temp1, temp2;    for(int i = 0;i < n * (n - 1) / 2; ++i) {      scanf("%d %d", &ii, &jj);      scanf("%d", &temp1);      scanf("%d", &temp2);      if(temp2) {        imap[ii][jj] = imap[jj][ii] = 0;      } else {        imap[ii][jj] = imap[jj][ii] = temp1;      }    }    ans = 0;    Prim();    printf("%d\n", ans);  }  return 0;}
0 0
原创粉丝点击