13751652677 发表于 2016-3-6 00:04:50

为什么出错了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;

}











































13751652677 发表于 2016-3-6 21:22:34

help

n0noper 发表于 2016-3-8 09:42:42

然而我把int arc[]; 修改为 arc; 就哦了 -_-
为什么要定义不定长数组?是不是看不起我?{:10_244:}

DAY 发表于 2016-3-8 13:00:46

头昏。。。。

13751652677 发表于 2016-3-8 13:13:36

n0noper 发表于 2016-3-8 09:42
然而我把int arc[]; 修改为 arc; 就哦了 -_-
为什么要定义不定长数组?是不是看 ...

你在说什么

n0noper 发表于 2016-3-8 13:37:10

13751652677 发表于 2016-3-8 13:13
你在说什么

额···好吧。
第一步:把MGraph结构体中int arc[];修改为int arc[MAXVEX];
第二步:编译
第三步:链接

如果有问题,再截图讨论。

13751652677 发表于 2016-3-8 13:45:08

n0noper 发表于 2016-3-8 13:37
额···好吧。
第一步:把MGraph结构体中int arc[];修改为int arc;
第二步: ...

但是算法部分饼干没有运行,答案是错误的

13751652677 发表于 2016-3-8 13:53:51

n0noper 发表于 2016-3-8 13:37
额···好吧。
第一步:把MGraph结构体中int arc[];修改为int arc;
第二步: ...

我知道了

n0noper 发表于 2016-3-8 13:54:09

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");
    }

13751652677 发表于 2016-3-8 13:55:24

n0noper 发表于 2016-3-8 13:54
假设这里有这么一个图:
A----B
|   \ /|


好厉害
页: [1]
查看完整版本: 为什么出错了Program received signal SIGSEGV, Segmentation fault.