首页 新闻 会员 周边 捐助

poj 1258 求解(kruskal算法)

0
悬赏园豆:15 [已关闭问题] 关闭于 2014-04-01 09:27

题目:  http://poj.org/problem?id=1258

数据都过了,求解啊。

code:

  1 #include <iostream>
  2 using namespace std;
  3 
  4 typedef struct node
  5 {
  6     int l;
  7     int r;
  8     int length;
  9     struct node *next;
 10 }Node,*LNode;      // 定义结构体
 11 void Init(LNode &L)   // 初始化结构体
 12 {
 13     L=new Node;
 14     L->next=NULL;
 15     L->l=0;
 16     L->r=0;
 17     L->length=0;
 18 }
 19 //将权值 从小到大 插入链表。
 20 void Create(LNode &L,int i,int j,int len) 
 21 {
 22     Node *p,*g;
 23     p=L->next;
 24     g=L;
 25     while(p)
 26     {     
 27         if(len<p->length)
 28             break;
 29         g=p;
 30         p=p->next;
 31     }
 32     Node *q;
 33     q=new Node;
 34     q->next=g->next;
 35     q->length=len;
 36     q->l=i;
 37     q->r=j;
 38     g->next=q;
 39 }
 40 /*
 41 
 42   void print(LNode L) // 是否排序
 43   {
 44   Node *p;
 45   p=L->next;
 46   while(p)
 47   {
 48         cout<<p->length<<" ";
 49         p=p->next;
 50         }
 51         cout<<endl;
 52 }*/
 53 #define MAX 1000
 54 int main()
 55 {
 56     LNode L;
 57     
 58     //    freopen("k.txt","r",stdin);
 59     int set[MAX];
 60     int n,i,j,e;
 61     while(cin>>n)
 62     {
 63         Init(L);
 64         for(i=1;i<=n;i++) // 将数组初始化
 65             set[i]=i;
 66         for(i=1;i<=n;i++)
 67             for(j=1;j<=n;j++)
 68             {
 69                 cin>>e;
 70                 if(e && i>j)  //下三角形不为0时按顺序插入链表中
 71                 {
 72                     Create(L,i,j,e);
 73                 }
 74             }
 75             // print(L);
 76             int sum=0; // 边的总和
 77             Node *p;
 78             p=L->next;
 79             int v=0; //边数
 80             while(p)
 81             {
 82                 int t1=p->l,t2=p->r;
 83                 if(set[t1]!=set[t2]) 
 84                 {
 85                     for(i=1;i<=n;i++) //将数组里为set[t2]的值时,全部改为set[t1];
 86                         if(set[i]==set[t2])
 87                             set[i]=set[t1];
 88                         set[t2]=set[t1];
 89                         sum+=p->length;
 90                         v++;
 91                         if(v==n-1)
 92                             break;
 93                 }
 94                 p= p->next;
 95             }
 96             cout<<sum<<endl;
 97             
 98     }
 99     
100     return 0;
101 }
lzyer的主页 lzyer | 初学一级 | 园豆:130
提问于:2013-12-17 17:06
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册