|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- void InsertSort(Edge r[],int n)
- {
- int i,j;
- for(i=2;i<n;i++)
- {
- if(r[i].w<r[i-1].w)
- {
- r[0]=r[i];
- j=i-1;
- while(r[0].w<r[j].w&&j>=1)
- {
- r[j+1]=r[j];
- j=j-1;
- }
- r[j+1]=r[0];
- }
- }
- }
- void Kruskal(MGraph g)
- {
- int i,j,u1,v1,sn1,sn2,k;
- int vset[MAXV];
- Edge E[MAXV];
- k=0;
- printf("克鲁斯卡尔算法:\n");
- for(i=0;i<g.n;i++)
- for(j=0;j<g.n;j++)
- if(g.edges[i][j]!=0&&g.edges[i][j]!=INF)
- {
- E[k].u=i;
- E[k].v=j;
- E[k].w=g.edges[i][j];
- k++;
- }
- InsertSort(E,g.e);
- for(i=0;i<g.n;i++)
- vset[i]=i;
- k=1;
- j=0;
- while(k<g.n)
- {
- u1=E[j].u;
- v1=E[j].v;
- sn1=vset[u1];
- sn2=vset[v1];
- if(sn1!=sn2)
- {
- printf("边(%d,%d)权为:%d\n",u1,v1,E[j].w);
- k++;
- for(i=0;i<g.n;i++)
- if(vset[i]==sn2)
- vset[i]=sn1;
- }
- j++;
- }
- }
复制代码
怎么修改 |
|