永发信息网

C语言关于图的邻接表建立

答案:4  悬赏:20  手机版
解决时间 2021-04-15 06:18
#include <stdio.h>
#include <stdlib.h>

#define MAX_VERTEX_NUM 20 //允许的最大顶点个数

typedef char VertexType[5]; //顶点数据的类型
typedef struct Node { //邻接表结点
int adjvex; //邻接点对应的顶点数组下标
struct Node *nextarc; //下一邻接点的指针
} ArcNode;

typedef struct VNode { //顶点数组
VertexType data; //顶点数据
ArcNode *firstarc; //邻接表首结点指针
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices; //(可挂接邻接表的)顶点数组
int vexnum, arcnum; //顶点的个数,边的条数
} ALGraph; //图

void CreateALGraph(ALGraph *G){ // 建立图的邻接表
int i,j,k;
ArcNode *s;
printf("输入顶点数:\n");
scanf("%d",G->vexnum);
printf("输入边数:\n");
scanf("%d",G->arcnum);
printf("输入顶点信息:\n");
for(i=0;i<G->vexnum;i++){
scanf("%c",&(G->vertices[i].data));
G->vertices[i].firstarc=NULL;
}
for(k=0;k<G->arcnum;k++){
printf("输入边信息(i,j)\n");
scanf("%d,%d",&i,&j);
s=(ArcNode *)malloc(sizeof(ArcNode));
s->adjvex=j;
s->nextarc=G->vertices[i].firstarc;
G->vertices[i].firstarc=s;
s=(ArcNode *)malloc(sizeof(ArcNode));
s->adjvex=i;
s->nextarc=G->vertices[j].firstarc;
G->vertices[j].firstarc=s;
}
}
void Display (ALGraph *G) {
ArcNode *p; //邻接表结点
printf("图的邻接表为:\n");
for(int i=0; i<G->vexnum; i++) {
printf("[%s]", G->vertices[i].data);
//沿邻接表显示各邻接点数据
p=G->vertices[i].firstarc;
while(p) {
printf("-->%d", p->adjvex);
p=p->nextarc;
}
printf("\n");
}
}

void main(void) {
ALGraph *g;
g = (ALGraph* )malloc(sizeof(ALGraph));
CreateALGraph(g); //接受输入,创建图
Display(g); //显示图的邻接表
}
我写的如上,在执行输入顶点数后,就崩溃了。求哪里有问题?
最佳答案
#include "iostream.h"

const int Max_vertex=5;
const int Max_Edge=8;
int visited[Max_vertex+1]; //访问标志数组

struct ArcNode
{
int adjvex;
ArcNode *nextarc; //指向下一条弧
};

struct Vnode
{
int v; //顶点信息
ArcNode *next;
}a[Max_vertex+1];


void creategraph()
{
int i,j,k;
ArcNode *s;
//初始化
for(i=1;i<=Max_vertex;i++)
{
a[i].v=i;
a[i].next=NULL;
}



for(k=1;k<=Max_Edge;k++)
{
cout<<"请输入第"<<k<<"条边:";
cin>>i>>j;
if(i>9||i<0||j<0||j>9)
{
cout<<"输入错误!!\n"<<endl;
break;
}
else{
cout<<endl;
s=new ArcNode;
s->adjvex=j;
s->nextarc=a[i].next;
a[i].next=s;
s=new ArcNode;
s->adjvex=i;
s->nextarc=a[j].next;
a[j].next=s;
}
}
}

void display()
{
ArcNode *p;
cout<<"你建立的图为:"<<endl;
for(int i=1;i<=Max_vertex;i++)
{
p=a[i].next;
cout<<a[i].v<<"->";
while(p->nextarc!=NULL)
{
cout<<p->adjvex<<"->";
p=p->nextarc;
}
cout<<p->adjvex<<endl;
}
}

void main()
{
cout<<""<<endl;
char yn='y';int k;
creategraph();
display();

}
全部回答
adjlist 是自定义类型,是char类型, 第二行 typedef将char类型自定义为 vertextype,即vertextype代表了char型, vertextype a 就相当于 char a; 同理 倒数第五行 typedef将vertexnode自定义为 adjlist[maxvertexnum]类型,也就是说现在adjlist就代表了一个 “结构体数组” 类型 adjlist adjlist 相当于 vertexnode adjlist[maxvertexnum] 这里主要是typedef关键字的使用 希望能帮到你
你scanf输入要取址的,应该是scanf("%d",&G->vexnum);
ALGraph *g;main()函数里面不能定义指针类型的结构,要定义实体,改为ALGraph g;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
折叠浴缸里用热得快直接烧热水可以吗?
嘉兴市禾韵民乐团在哪里啊,我有事要去这个地
为什么html网页直接双击网页都能显示,但在vs
高考音乐加试钢琴《牧童短笛》会不会太简单了
豆芽助手怎么进去
人没了感情回怎么样
关系DZ论坛数据的问题!!???
如图所示,甲、乙、丙三个容器的底面积不相等
暗讽一个人自私的句子,说一个人自私不考虑别
向量矢量问题,回归方程问题。。
ps2 现在多少钱呢
夏津县光明植物油厂在什么地方啊,我要过去处
收到职工归还借款应计入本期收入吗?
必须和员工签劳动合同吗,不签劳动合同要承担
辽警是否是一本
推荐资讯
colza09年新款女外套,一件深紫色的,怎么配
爱情和婚姻
陈记烤鱼在什么地方啊,我要过去处理事情
火锅节是什么时候?
淘宝店有一家叫【甜甜圈圈】的,大家去过买衣
厦门是谁带动起来的
求大神把我这跟电线p成断的
爸爸姓刘妈妈姓章宝宝名字
丹东浪头镇的邮编是多少?
求一个同花顺周线MACD绿柱变短或红柱子变长公
道德的约束力都多大
为什么我玩游戏的时候会这样
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?