CH6_30.C
上传用户:lgb298
上传日期:2013-03-22
资源大小:1025k
文件大小:1k
源码类别:

软件工程

开发平台:

C/C++

  1. #include <stdio.h>
  2. #define M  15
  3. #define MAX 100
  4. typedef struct
  5. {   int data;
  6.     int jihe;
  7. }VEX;
  8. typedef struct
  9. {  int vexh,vext;
  10.    int weight;
  11.    int flag;
  12. }EDGE;
  13. void minitree_KRUSKAL(void)
  14. {   int n,i,m,min,k,j;
  15.     VEX t[M];
  16.     EDGE  e[M];
  17.     printf("Input number of vertex and edge:");
  18.     scanf("%d,%d",&n,&m);
  19.     for(i=1;i<=n;i++)
  20.     {   printf("t[%d].data=:",i);
  21. scanf("%d",&t[i].data);
  22. t[i].jihe=i;
  23.     }
  24.     for(i=0;i<m;i++)
  25.     {   printf("vexh,vext,weight:");
  26. scanf("%d,%d,%d",&e[i].vexh,&e[i].vext,&e[i].weight);
  27. e[i].flag=0;
  28.     }
  29.     i=1;
  30.     while(i<n)
  31.     {   min=MAX;
  32. for(j=0;j<m;j++)
  33. {  if(e[j].weight<min && e[j].flag==0)
  34.    {   min=e[j].weight;
  35.        k=j;
  36.    }
  37. }
  38. if(t[e[k].vexh].jihe!=t[e[k].vext].jihe)
  39. {    e[k].flag=1;
  40.      for(j=1;j<=n;j++)
  41. if(t[j].jihe==t[e[k].vext].jihe)
  42.    t[j].jihe=t[e[k].vexh].jihe;
  43.      t[e[k].vext].jihe=t[e[k].vexh].jihe;
  44.      i++;
  45. }
  46. else
  47.    e[k].flag=2;
  48.     }
  49.     for(i=0;i<m;i++)
  50.        if(e[i].flag==1)
  51.  printf("%d,%d :%dn",e[i].vexh,e[i].vext,e[i].weight);
  52. }
  53. void main()
  54. {  minitree_KRUSKAL();
  55. }