C语言关于图的邻接表建立 15
#include<stdio.h>#include<stdlib.h>#defineMAX_VERTEX_NUM20//允许的最大顶点个数typedefcharVerte...
#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 <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); //显示图的邻接表
}
我写的如上,在执行输入顶点数后,就崩溃了。求哪里有问题? 展开
4个回答
展开全部
#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<<"/******\t本算法以关插法建立无向图的邻接表为例!\t******/"<<endl;
char yn='y';int k;
creategraph();
display();
}
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<<"/******\t本算法以关插法建立无向图的邻接表为例!\t******/"<<endl;
char yn='y';int k;
creategraph();
display();
}
追问
这个是C++,我没接触过,求转换成C
展开全部
你scanf输入要取址的,应该是scanf("%d",&G->vexnum);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ALGraph *g;main()函数里面不能定义指针类型的结构,要定义实体,改为ALGraph g;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf("%d",G->vexnum);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询