首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于最小生成树,如何没出结果呢

2013-06-26 
关于最小生成树,怎么没出结果呢?#includestdio.h#includestdlib.h#define maxsize 100#define INFINIT

关于最小生成树,怎么没出结果呢?

#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
#define INFINITY 65535
int sum;
/****************图的邻接表表示***********/
typedef struct
{
int no;
char info;
}VertexType;
typedef struct
{
int edges[maxsize][maxsize];//边数组存放权值
int n,e;//n为顶点数,e为边数
VertexType vex[maxsize];//顶点数组,存放顶点值
}Mgraph;
/***************建立无向图的邻接矩阵*************************/
Mgraph * createMgraph()
{
Mgraph * G;
G=(Mgraph*)malloc(sizeof(Mgraph));
int i,j,k,w;
printf("请输入顶点和边数:\n");
scanf("%d,%d",&G->n,&G->e);
for(i=0;i<G->n;i++)//顶点入数组
{
printf("请输入顶点信息:\n");
scanf("%d",& G->vex[i]);
fflush(stdin);
}
for(i=0;i<G->n;i++)
for(j=0;j<G->n;j++)
{
G->edges[i][j]=INFINITY;//矩阵的初始化***********IMPORTANT

}
for(i=0;i<G->n;i++)
for(j=0;j<G->n;j++)
{
if(i==j)
{G->edges[i][j]=0;}
}
for(k=0;k<G->e;k++)//值入矩阵 G->edges[i][j]值为权值
{
printf("请输入(vi,vj)的下标i和下标j以及权值:\n");
scanf("%d,%d,%d",&i,&j,&w);
G->edges[i][j]=w;
G->edges[i][j]=G->edges[j][i];
}
return G;
}

void prim(Mgraph * G ,int v0) 
{
/*****函数引用了型参之后是否要分配空间?要*****/

G=(Mgraph*)malloc(sizeof(Mgraph));
int lowcost[maxsize],vset[maxsize],v;
int i,j,k,min;
v=v0;
for(i=0;i<G->n;i++)
{
lowcost[i]=G->edges[v0][i];
vset[i]=0;
}
vset[v0]=1;
sum=0;

for(i=1;i<G->n;i++)
{
min=INFINITY ;
for(j=1;j<=G->e;j++)
{
if(vset[j]==0&&lowcost[j]<min)
{//找出最短边中最短的一条
min=lowcost[j];
k=j;
}
vset[k]=1;
v=k;
sum+=min;
printf("%d ",k);
}
for(j=1;j<=G->n;j++)
{
if(vset[j]==0&&G->edges[v][j]<lowcost[j])
{lowcost[j]=G->edges[v][j];}
}
}


printf("\n");
printf("%d\n",sum);
}
int main(void)
{
Mgraph * G;
G =(Mgraph *)malloc(sizeof(Mgraph));
G=createMgraph();
prim( G ,0);


return 1;
}

[解决办法]
内存泄露和非标准代码我就不说了。58行G=(Mgraph*)malloc(sizeof(Mgraph));直接把你传进来的图给覆盖掉了。那能算个妹啊。

热点排行