qq_27994711 2015-12-16 14:54 采纳率: 40%
浏览 1336
已采纳

c程序改错 没有错误 可是没法运行 可以帮忙改一下嘛

#include
#define MAXVEX 100
#define INFINITY 65535
typedef int edgetype ;
typedef char vertextype;
typedef struct {
vertextype vexs[MAXVEX];
edgetype arc[MAXVEX][MAXVEX]; //邻接矩阵储存的结构
int numvertexes ,numedges;

}mgraph;

void createmgraph(mgraph *g)
{
int i,j,k,w;
printf("输入顶点数和边数:\n");
scanf("%d%d",&g->numvertexes,&g->numedges);
printf("输入顶点数和边数:\n");//读入顶点信息
for(i=0;inumvertexes;i++)

scanf("%c",g->vexs[i]);

for(i=0;i<g->numvertexes;i++)
    for (j=0;j<g->numvertexes;j++)                //初始化邻接矩阵
        g->arc[i][j]=INFINITY;

for(k=0;knumedges;j++)
{
printf("输入边(vi,vj)上的下标i,j,和权w\n");
scanf("%d%d%d",&i,&j,&w);
g->arc[i][j]=w;
g->arc[j][i]=w;
}
}

void main()
{
int i,j;
mgraph* g;
createmgraph(g);
printf("输出图的所的边\n");
for(i=0;inumedges;i++)
for(j=0;jnumedges;j++)
{
if(g->arc[i][j]!=0)
printf("图的边为(%d,%d),权值为%d",i,j,g->arc[i][j]);
}
}

还有定义的那个图g 它是一个指针变量 意思是指向定义的那个图的变量对吧 那么调用那个函数的时候 函数名后面括号里面需要写形参的类型嘛?形参是指针那我写*g 还是g?这个程序还有一个警告 求好心人帮忙

  • 写回答

1条回答 默认 最新

  • ysuwood 2015-12-16 15:48
    关注

    是拷贝出错了吧,好多错误。
    主要错误g没有初始化。修改如下:

     #include <stdio.h>
    #include<stdlib.h>
    
    #define MAXVEX 100
    #define INFINITY 65535
    typedef int edgetype ;
    typedef char vertextype;
    typedef struct {
        vertextype vexs[MAXVEX];
        edgetype arc[MAXVEX][MAXVEX]; //邻接矩阵储存的结构
        int numvertexes ,numedges;
    }mgraph;
    void createmgraph(mgraph *g)
    {
        int i,j,k,w;
        printf("输入顶点数和边数:\n");
        scanf("%d%d",&g->numvertexes,&g->numedges); 
        printf("输入顶点数和边数:\n");//读入顶点信息
        for(i=0;i<g->numvertexes;i++)//修改
    
            scanf("%c",g->vexs[i]);
        for(i=0;i<g->numvertexes;i++)//修改
            for (j=0;j<g->numvertexes;j++)                //初始化邻接矩阵
                g->arc[i][j]=INFINITY;
        for(k=0;k<g->numedges;j++)//修改
        {
            printf("输入边(vi,vj)上的下标i,j,和权w\n");
            scanf("%d%d%d",&i,&j,&w);
            g->arc[i][j]=w;
            g->arc[j][i]=w;
        }
    }
    void main()
    {
        int i,j;
        mgraph* g;
        g=(mgraph*)malloc(sizeof(mgraph));//增加初始化
        createmgraph(g);
        printf("输出图的所的边\n");
        for(i=0;i<g->numedges;i++)//修改
            for(j=0;j<g->numedges;j++)//修改
            {
                if(g->arc[i][j]!=0)
                    printf("图的边为(%d,%d),权值为%d",i,j,g->arc[i][j]);
            }
    
        if(g) free(g);//增加
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集