关于网友提出的“ 关于最小生成树”问题疑问,本网通过在网上对“ 关于最小生成树”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 关于最小生成树
描述: #include
#include
#include
#define VNumber 8
#define ENumber 14
struct VNode//顶点的结构体
{
char name;//顶点的名字
int n;//顶点所在的集合编号
}V[VNumber];
struct ENode//边的结构体
{
int length;//边的权值,表示路径长度
int ivex,jvex;//边的两端顶点号
bool b;
}E[ENumber],*min,*temp;
main()
{
int i,k,a;
int j=0,t=0;//用j来标记找到的边的条数
// int VNumber,ENumber;
/* printf("请输入顶点个数:");
scanf("%d",&VNumber);
printf("请输入边个数:");
scanf("%d",&ENumber); */
for(i=1;i<=VNumber;i++)//获取顶点
{
printf("请输入第");
printf("%d",i);
printf("个顶点的名称");
V[i]=(struct VNode)malloc(sizeof(struct VNode));
scanf("%c&t",&V[i-1].name);
V[i-1].n=0;
}
/*printf("请输入0或1,1表示结束");
scanf("%d",t);
case 0:*/
for(i=0;i
{
printf("起点、终点和路径长度分别为:");
scanf("%d %d %d",&E[i].ivex,&E[i].jvex,&E[i].length);
E[i].b=false;
}
*min=E[0];
for(k=0;k
for(i=k;i
{ *min=E[i].length<>
*temp=E[k];E[k]=*min;min=temp;
}//找最短路径
for(i=0;i<=ENumber-1&&j!=VNumber-1;i++)
{
if(V[E[i].ivex].n==0&&V[E[i].jvex].n==0)
{
j++;
t++;
V[E[i].ivex].n=t;
V[E[i].jvex].n=t;
E[i].b=true;//将找到的当前最短路径作出标记
}
if(V[E[i].ivex].n==0&&V[E[i].jvex].n!=0)
{
j++;
V[E[i].ivex].n=V[E[i].jvex].n;
E[i].b=true;
}
if(V[E[i].ivex].n!=0&&V[E[i].jvex].n==0)
{
j++;
V[E[i].jvex].n=V[E[i].ivex].n;
E[i].b=true;
}
if(V[E[i].ivex].n!=V[E[i].jvex].n&&V[E[i].ivex].n!=0&&V[E[i].jvex].n!=0)
{
j++;
// k=V[E[i].ivex].n<>
if(V[E[i].ivex].n<>
{
for(a=0;a<=VNumber;a++)
{if(V[a].n==V[E[i].ivex].n)
V[a].n=V[E[i].jvex].n;}
}
if(V[E[i].ivex].n>V[E[i].jvex].n)
{
for(a=0;a<=VNumber;a++)
{if(V[a].n==V[E[i].jvex].n)
V[a].n=V[E[i].ivex].n;}
}
E[i].b=true;//将找到的当前最短路径作出标记
}
}
for(k=0;k<=ENumber-1;k++)
{
if(E[k].b)
printf("生成树的边的起止点及权值分别为:%c%c%d",V[E[k].ivex].name,V[E[k].jvex].name,E[k].length);
}
}
请问各路高手,这个最小生成树问题有哪些问题啊
以上介绍了“ 关于最小生成树”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2875646.html