为什么出错了Program received signal SIGSEGV, Segmentation fault.
#include <stdio.h>
#define INFINITY 65535
#define MAXVEX 4
typedef int path_parent;
typedef int shortpath;
typedef struct
{
int numvertexes;
int arc[];//={0,INFINITY,5,6,INFINITY,INFINITY,0,INFINITY,3,1,
//5,INFINITY,0,INFINITY,4,6,3,INFINITY,0,2,INFINITY,1,4,2,0};
}MGraph;
init(MGraph *G)
{
int i,j;
intk=4;
(*G).numvertexes=MAXVEX;
for(i=0;i<MAXVEX;i++)
{
for(j=0;j<MAXVEX;j++)
{
printf("请输入%d->%d边的权值:",i,j);
scanf("%d",&(*G).arc);
printf("\n");
}
}
for(i=0;i<k;i++)
{
printf(" %d",i);//第一列为顶点的信息
for(j=0;j<k;j++)
{
printf("%d",(*G).arc); //顶点和顶点之间的关系
}
printf("\n");
}
}
void shortestpath_floyd(MGraph *G,path_parent *p,shortpath *d)
{
int v,w,k;
//初始化D和P
for(v=0;v<G->numvertexes;v++)
{
for(w=0;w<G->numvertexes;w++)
{
(*d)=G->arc;
(*p)=w;
}
}
//优美的弗洛伊德算法
for(k=0;k<G->numvertexes;k++)
{
for(v=0;v<G->numvertexes;v++)
{
for(w=0;w<G->numvertexes;w++)
{
if((*d)>(*d)+(*d))
{
(*d)=(*d)+(*d);
(*p)=(*p);
}
}
}
}
}
//图的输出结构
void shuchu(MGraph* tu)
{
int i,j,k;
k=tu->numvertexes;
//输出第一行顶点的信息
printf(" 顶点");
for(i=0;i<k;i++)
{
printf(" %d",i);
}
printf("\n");
for(i=0;i<k;i++)
{
printf(" %d",i);//第一列为顶点的信息
for(j=0;j<k;j++)
{
printf("%d",tu->arc); //顶点和顶点之间的关系
}
printf("\n");
}
}
int main()
{
MGraph A;
init(&A);
shuchu(&A);
path_parent b;
shortpath c;
shortestpath_floyd(&A,&b,&c);
shuchu(&A);
return 0;
}
help 然而我把int arc[]; 修改为 arc; 就哦了 -_-
为什么要定义不定长数组?是不是看不起我?{:10_244:} 头昏。。。。 n0noper 发表于 2016-3-8 09:42
然而我把int arc[]; 修改为 arc; 就哦了 -_-
为什么要定义不定长数组?是不是看 ...
你在说什么 13751652677 发表于 2016-3-8 13:13
你在说什么
额···好吧。
第一步:把MGraph结构体中int arc[];修改为int arc[MAXVEX];
第二步:编译
第三步:链接
如果有问题,再截图讨论。 n0noper 发表于 2016-3-8 13:37
额···好吧。
第一步:把MGraph结构体中int arc[];修改为int arc;
第二步: ...
但是算法部分饼干没有运行,答案是错误的 n0noper 发表于 2016-3-8 13:37
额···好吧。
第一步:把MGraph结构体中int arc[];修改为int arc;
第二步: ...
我知道了 13751652677 发表于 2016-3-8 13:45
但是算法部分饼干没有运行,答案是错误的
假设这里有这么一个图:
A----B
| \ /|
| / \|
C----D
四条外围路径权值为1,B-C权值为3,A-D权值为3
根据你程序init的时候,输入书序分别为:
0,1,1,3
1,0,3,1
1,3,0,1
3,1,1,0
然后你注意,shuchu()这个函数里打印出的是你输入的矩阵,并不是你计算出的b和c,所以循环输出b和c即可。
for(i=0;i<k;i++)
{
printf(" %d",i);
for(j=0;j<k;j++)
{
printf("%d",b);
}
printf("\n");
} n0noper 发表于 2016-3-8 13:54
假设这里有这么一个图:
A----B
| \ /|
好厉害
页:
[1]