第1个回答 2011-01-12
void kruscal(int e1[],int v[],int e[][][],int n)
{
int i,j;
for(i=0,j=0;j<n-1;i++)
if(v[e[i][1]]!=v[e[i][2]]) { y(e[i][1],e[i][2],n); e1[j++]=i; }
}
void y(int a,int b int v[],int n)
{
int i;
for(i=0;i<n;i++)
if(v[i]==a) v[i]=b;
}
//e1保存选中的边的下标,例如第一个边选的是e的第一条边,那么有:e1[0]==0。
//v是节点,保存一个标志,连在一起的标志相等,e保存的是距离和两个点。
//e数组要求是按照距离从小到大有序的,排序函数就不用我写了吧。
// n是节点数。
//函数y需要声明在调用它的函数前面,功能:把下标是a的都换成b。