鱼C论坛

 找回密码
 立即注册
查看: 8223|回复: 9

[已解决]为什么出错了Program received signal SIGSEGV, Segmentation fault.

[复制链接]
发表于 2016-3-6 00:04:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


#include <stdio.h>

#define INFINITY 65535

#define MAXVEX 4

typedef int path_parent[MAXVEX][MAXVEX];
typedef int shortpath[MAXVEX][MAXVEX];


typedef struct
{
    int numvertexes;
    int arc[][MAXVEX];//={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;
   int  k=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[i][j]);
            printf("\n");
        }

    }
       for(i=0;i<k;i++)
   {
           printf("     %d",i);  //第一列为顶点的信息
           for(j=0;j<k;j++)
           {
               printf("  %d",(*G).arc[i][j]);   //顶点和顶点之间的关系
           }
           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)[v][w]=G->arc[v][w];
            (*p)[v][w]=w;
        }
    }

    //优美的弗洛伊德算法

    for(k=0;k<G->numvertexes;k++)
    {
        for(v=0;v<G->numvertexes;v++)
        {
            for(w=0;w<G->numvertexes;w++)
            {
                if((*d)[v][w]>(*d)[v][k]+(*d)[k][w])
                {
                    (*d)[v][w]=(*d)[v][k]+(*d)[k][w];
                    (*p)[v][w]=(*p)[v][k];
                }
            }
        }
    }

}

//图的输出结构
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[i][j]);   //顶点和顶点之间的关系
           }
           printf("\n");
    }
}


int main()
{
    MGraph A;
    init(&A);
    shuchu(&A);
    path_parent   b;
    shortpath c;




  shortestpath_floyd(&A,&b,&c);

shuchu(&A);

    return 0;

}











































最佳答案
2016-3-8 09:42:42
然而我把int arc[][MAXVEX]; 修改为 arc[MAXVEX][MAXVEX]; 就哦了 -_-
为什么要定义不定长数组?是不是看不起我?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-6 21:22:34 From FishC Mobile | 显示全部楼层
help
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-8 09:42:42 | 显示全部楼层    本楼为最佳答案   
然而我把int arc[][MAXVEX]; 修改为 arc[MAXVEX][MAXVEX]; 就哦了 -_-
为什么要定义不定长数组?是不是看不起我?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-8 13:00:46 | 显示全部楼层
头昏。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-3-8 13:13:36 | 显示全部楼层
n0noper 发表于 2016-3-8 09:42
然而我把int arc[][MAXVEX]; 修改为 arc[MAXVEX][MAXVEX]; 就哦了 -_-
为什么要定义不定长数组?是不是看 ...

你在说什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-8 13:37:10 | 显示全部楼层

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

如果有问题,再截图讨论。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-8 13:45:08 | 显示全部楼层
n0noper 发表于 2016-3-8 13:37
额···好吧。
第一步:把MGraph结构体中int arc[][MAXVEX];修改为int arc[MAXVEX][MAXVEX];
第二步: ...

但是算法部分饼干没有运行,答案是错误的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-8 13:53:51 | 显示全部楼层
n0noper 发表于 2016-3-8 13:37
额···好吧。
第一步:把MGraph结构体中int arc[][MAXVEX];修改为int arc[MAXVEX][MAXVEX];
第二步: ...

我知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i][j]);  
           }
           printf("\n");
    }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-8 13:55:24 | 显示全部楼层
n0noper 发表于 2016-3-8 13:54
假设这里有这么一个图:
A----B
|   \ /  |

好厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 20:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表