还是畅通工程 hdu1233

来源:互联网 发布:淘宝搜索8天大词卡首页 编辑:程序博客网 时间:2024/05/18 02:46

http://acm.hdu.edu.cn/showproblem.php?pid=1233

// 最小生成树的prim 算法,一开始知道原理,但是就是不知怎么把知道的转换成计算机语言,鉴戒了别人的算法后才可以写出
#include<iostream>//2246861 2010-03-25 18:03:27 Accepted 1233 187MS 276K 971 B C++ 悔惜晟 
#include<cstdio>
using namespace std;
int const MAX = 10000000;

int link[101];//表示已连接点的位置
int visit[101];//表示一个点没有连接过
int map[101][101];

int main()
{
 int n, i ,j, a, b, dis, sum;
 while(scanf("%d", &n) != EOF && n != 0)
 {
  for( i =1 ; i <= n ;i++)
  {
   //link[i] = 0;
   visit[i] = 1;//表示一个点没有连接过
   for(j = 1; j<= n; j++)
    map[i][j] = MAX;
  }
  for(i = 1; i <= n*(n - 1)/2; i++)
  {
   scanf("%d%d%d", &a, &b, &dis);
   map[a][b] = dis;
   map[b][a] = dis;
  }
  //link[1] = 0;
  visit[1] = 0;
  link[0] = 1;
  int cnt =1;
  sum = 0;
  while(cnt < n)
  {
   int min = MAX;
      for(i = 0 ;i < cnt ;i++)
    for(j = 1; j<= n; j++)
     if(visit[j] && map[link[i]][j] < min)
      {
      min = map[link[i]][j];
      //a = j;
      link[cnt] = j;
     }
     
     //link[cnt] = a;
     visit[link[cnt]] = 0;
     sum += min;
     cnt++;
     
  }
  printf("%d/n",sum);
 }
}
   
  
  
  
  

 

#include<iostream>//2233542 2010-03-23 11:41:01 Accepted 1233 187MS 320K 789 B C++ 悔惜晟
#include<algorithm>// Kruskal 用于稀疏图  效率不高,还是有改进
#include<cstdio>
using namespace std;
int tt[4950];//一开始这里赋值100 越界

struct stu
{
 int a;
 int b;
 int s;
}df[4950];

int cmp(stu a, stu b)
{
 return a.s < b.s;
}

int find(int a)
{
 int r = a;
 while(r != tt[r])
  r = tt[r];
 return r;
}

void mergy(int a, int b)
{
 if(a > b) tt[b] = a;
 else    tt[a] = b;
}
int main()
{
 int i, n, a, b, sum;
 while(scanf("%d", &n) != EOF && n != 0)
 {
  n = n*(n-1)/2;
  for(i = 0; i < n; i++)
  {
   scanf("%d%d%d", &df[i].a, &df[i].b, &df[i].s);
   tt[i+1] = i+1;
  }
  sort(df, df+n, cmp);//先把这里排序
  sum = 0;
  for(i = 0; i < n ; i++)
  {
   a = find(df[i].a);
   b = find(df[i].b);
   if(a != b)
   {
    mergy(a, b);
    sum +=df[i].s;
   }
  }
  
  printf("%d/n",sum);
 }
}

原创粉丝点击