void reform_map(graph *edge,int e)
{
int i,j,k;
int start,end;
graph *edge2;
char ch;
edge2=(graph *)malloc(sizeof(graph)*e);//创建一个地图数组的副本
for (i=1;i<=e;i++)
edge2[i]=edge[i];
int v1,v2;
printf("
请输入要删除的边:");
scanf("%d,%d",&v1,&v2);
for (i=1;i<=e;i++)
{
if (edge2[i].v1==v1&&edge2[i].v2==v2||edge2[i].v1==v2&&edge2[i].v2==v1)
{
if (edge2[i].weight==0)
{
printf("
该边不在最小生成树中,按任意键继续......");
getchar();
return ;
}
edge2[i].flag=2;
MFSet_initial();//重新初始化root数组
for (j=1;j<=e;j++)//重新构造root数组
{
if(edge2[j].flag==1)
{
start=MFSet_find(root,edge[j].v1);
end=MFSet_find(root,edge[j].v2);
MFSet_merge(root,start,end);
}
}
for (k=1;k<=e;k++)
{
if(edge2[k].flag==0)
{
start=MFSet_find(root,edge2[k].v1);
end=MFSet_find(root,edge2[k].v2);
if(start!=end)
{
MFSet_merge(root,start,end);
printf("
在%d和%d之间铺设线路,权值为%d\n",edge2[i].v1,edge2[i].v2,edge2[i].weight);
edge2[k].flag=1;
printf("
需要打印修改后的最小生成树吗(y/n):");
fflush(stdin);
ch=getch();
if (ch=='y'||ch=='Y')
print(edge2,e);
free(edge2);
return ;
}
}
}
}
}
printf("
未找到该条线路,按任意键继续......");
free(edge2);
fflush(stdin);
getch();
}
注释写少了,大家就看看free()有什么错吧