鱼C论坛

 找回密码
 立即注册
查看: 2614|回复: 7

怎么改呀大佬们 main函数里面好像有错误

[复制链接]
发表于 2021-6-4 22:56:21 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

#define M 20            //预定义图的最大顶点数

typedef char DataType; //顶点信息数据类型

typedef struct node {      //边表结点
        int adjvex;      //邻接点
        struct node *next;
}EdgeNode;

typedef struct vnode {     //头结点类型
        DataType vertex;         //顶点信息
        EdgeNode *FirstEdge;  //邻接链表头指针
}VertexNode;

typedef struct {          //邻接表类型
        VertexNode adjlist[M]; //存放头结点的顺序表
        int n, e;                 //图的顶点数与边数
}LinkedGraph;

/*
函数功能:建立图的邻接表
函数参数:邻接表指针变量g;
存放图信息的文件名filename;
图的类型参数c,c=0表示建立无向图,否则表示建立有向图
函数返回值:无
*/

void creat(LinkedGraph *g, char *filename, int c)
{
        int i, j, k;
        EdgeNode *s;
        FILE *fp;
        fp = fopen(filename, "r");
        if (fp)
        {
                fscanf(fp, "%d%d", &g->n, &g->e);             //读入顶点数与边数

                for (i = 0; i < g->n; i++)
                {
                        fscanf(fp, "%1s", &g->adjlist[i].vertex);   //读入顶点信息
                        g->adjlist[i].FirstEdge = NULL;        //边表置为空表
                }

                for (k = 0; k < g->e; k++)                    //循环e次建立边表
                {
                        fscanf(fp, "%d%d", &i, &j);                // 输入无序对(i,j)
                        s = (EdgeNode *)malloc(sizeof(EdgeNode));
                        s->adjvex = j;                        //邻接点序号为j
                        s->next = g->adjlist[i].FirstEdge;
                        g->adjlist[i].FirstEdge = s;         //将新结点*s插入顶点vi的边表头部
                        if (c == 0)                           //无向图
                        {
                                s = (EdgeNode *)malloc(sizeof(EdgeNode));
                                s->adjvex = i;                        //邻接点序号为i
                                s->next = g->adjlist[j].FirstEdge;
                                g->adjlist[j].FirstEdge = s;     //将新结点*s插入顶点vj的边表头部
                        }
                }
                fclose(fp);
        }
        else
                g->n = 0;
}

//函数print():输出邻接表存储结构
void print(LinkedGraph g)
{
        EdgeNode *p;
        int i;
        for (i = 0; i < g.n; i++)
        {
                printf("%c", g.adjlist[i].vertex);
                p = g.adjlist[i].FirstEdge;
                while (p)
                {
                        printf("-->%d", p->adjvex);
                        p = p->next;
                }
                printf("\n");
        }
}

//函数weight():输出无向图各顶点的度数
void weight(LinkedGraph g)
{
        EdgeNode *p;
        int n, i;
        for (i = 0; i < g.n; i++)
        {
                n = 0;
                p = g.adjlist[i].FirstEdge;
                while (p)
                {
                        n++;
                        p = p->next;
                }
                cout << i << ":" << n << endl;
                //printf("%d:%d\n",i,n);
        }
}

int main()
{
        LinkedGraph * Grap = newLinkedGraph;
        creat(Grap,"G11.TXT", 0);
        print(*Grap);
        weight(*Grap);
        delete Grap;
        /*
        LinkedGraph g;
        creat(&g,"G11.TXT",0);
        print(g);
        weight(g);
         */
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-5 00:03:06 | 显示全部楼层
LinkedGraph * Grap = newLinkedGraph;  后面newLinkedGraph连起来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-5 00:08:54 | 显示全部楼层
我在vs下调试 提示将  void creat(LinkedGraph* g,char* filename, int c) 改为 void creat(LinkedGraph* g,const char* filename, int c)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-5 10:23:16 | 显示全部楼层
lei1996 发表于 2021-6-5 00:08
我在vs下调试 提示将  void creat(LinkedGraph* g,char* filename, int c) 改为 void creat(LinkedGraph* g ...

它提示我fopen有问题然后弄了那个err=fopen_s(    也不知道错哪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-5 10:31:13 | 显示全部楼层
lei1996 发表于 2021-6-5 00:08
我在vs下调试 提示将  void creat(LinkedGraph* g,char* filename, int c) 改为 void creat(LinkedGraph* g ...

为什么我在VC6.0下运行没出来什么呀 是不是之前要建什么txt文件呀 这个文件调用没怎么学过 不怎么会用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-5 11:05:59 From FishC Mobile | 显示全部楼层
Gacy 发表于 2021-6-5 10:31
为什么我在VC6.0下运行没出来什么呀 是不是之前要建什么txt文件呀 这个文件调用没怎么学过 不怎么会用{:1 ...

fp = fopen(filename, "r");
这里不是有?这句代码要求原文件必须事先存在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-5 11:39:07 | 显示全部楼层
看不透
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-5 20:26:49 | 显示全部楼层
wp231957 发表于 2021-6-5 11:05
fp = fopen(filename, "r");
这里不是有?这句代码要求原文件必须事先存在

emm就没学过这个 然后百度也不是很懂 哭了太菜了 大佬还能细说吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 12:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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