读书人

为啥小弟我输入总结束不了啊了。

发布时间: 2012-04-15 18:39:21 作者: rapoo

为啥我输入,总结束不了啊?请教大家了。。。
在下面这个:for(k=0;k<G.arcnum;k++)
{
fflush(stdin);
scanf("%d %d %d",&i,&j,&x);
G.adj[i][j]=x;
G.adj[j][i]=x;
}
代码块中,G.arcnum=10,我输入十次了,可还是提示我继续输入,为啥啊?
下面是全部代码:
#include<stdio.h>
#include<conio.h>
#define INF 32767
typedef struct
{
char vexs[6];
int adj[6][6];
int vexnum,arcnum;
}Mgragh;
typedef struct
{
int begin,end;
int cost;
}treeedge;
Mgragh G;
void create()
{
int i,j,k,x;
printf("请输入顶点数和边数:\n");
scanf("%d %d",&(G.vexnum),&(G.arcnum));
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++)
G.adj[i][j]=INF;
for(i=0;i<G.vexnum;i++)
{
printf("\n请输入顶点值:\n");
G.vexs[i]=getche();
}
printf("\n请输入%d条边的下标和权值:\n",G.arcnum);
for(k=0;k<G.arcnum;k++)
{
fflush(stdin);
scanf("%d %d %d",&i,&j,&x);
G.adj[i][j]=x;
G.adj[j][i]=x;
}
}
void prim()
{
int lowercost[6],mincost=0,closevertex[6];
treeedge close[6];
int i,j,k,sum=0;
for(i=1;i<G.vexnum;i++)
{
lowercost[i]=G.adj[0][i];
closevertex[i]=0;
}
lowercost[0]=0;
closevertex[0]=0;
for(i=1;i<G.vexnum;i++)
{
mincost=INF;
j=1;
k=1;
while(j<G.vexnum)
{
if(lowercost[j]!=0&&lowercost[j]<mincost)
{
mincost=lowercost[j];
k=j;
j++;
}
}
close[i-1].begin=closevertex[k];
close[i-1].end=k;
close[i-1].cost=mincost;
sum=sum+mincost;
lowercost[k]=0;
for(j=1;j<G.vexnum;j++)
if(G.adj[k][j]<lowercost[j])
{
lowercost[j]=G.adj[k][j];
closevertex[j]=k;
}
}
printf("最小生成树如下所示:\n始点 终点 权值\n");
for(i=0;i<G.vexnum-1;i++)
{
printf("%d %d %d\n",close[i].begin,close[i].end,close[i].cost);
}
printf("最下生成树的总权值为:%d\n",sum);
}
void main()
{
create();
prim();
}

[解决办法]
并不是那个问题!
是你那个while(j<G.vexnum)有些情况下根本终止不了。

读书人网 >C语言

热点推荐