无向图的建立 程序运行最后崩溃了 求高手指导 已经看了好几天了 还是找不出原因,该怎么解决
无向图的建立 程序运行最后崩溃了 求高手指导 已经看了好几天了 还是找不出原因
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct arcnode
{
//弧结点定义
int adjvex;//该弧所指的顶点信息
struct arcnode *next;//指向下一条弧
}arcnode;
typedef struct vnode //顶点结点
{
int data; //顶点信息
arcnode *firstarc;//指向第一条依附该顶点的弧
}vernode ;
typedef vernode adjlist[100];
//图的结构定义
typedef struct
{
adjlist ver;
int vernum,arcnum;
}graph;
void create(graph &g)//创建无向图
{
int i,j,k;
int temp;
printf("请输入图的顶点和弧数:\n");
scanf("%d%d",&g.vernum,&g.arcnum);
temp=getchar();
printf("输入%d顶点\n",g.vernum);
for(i=0;i<g.vernum;i++)
{
printf("输入第%d顶点",i+1);
scanf("%d",&g.ver[i].data);
temp=getchar();
g.ver[i].firstarc=NULL;//边表置空
}
//建立边
printf("输入弧的信息\n");
printf("输入%d条弧",g.arcnum);
printf("\n");
for(k=0;k<g.arcnum;k++)
{
printf("输入第%d条弧",k+1);
scanf("%d%d",&i,&j);//输入表示弧<vi,vj>的顶点序
temp=getchar();
arcnode *p1,*p2;
p1=(arcnode *)malloc(sizeof(arcnode));//生成边表结点
p1->adjvex=j; //邻结点信息
p1->next=g.ver[i].firstarc;
g.ver[i].firstarc=p1;//将新结点插入到边表头部
p2=(arcnode *)malloc(sizeof(arcnode));//生成边表结点
p2->adjvex=i;
p2->next=g.ver[j].firstarc;
g.ver[i].firstarc=p2;
}
}
//图的深度优先搜索算法
int visited[MAXSIZE] ; //标志 1表示已访问
void DFS(graph g,int v)
{
arcnode *p;
printf("%d",g.ver[v].data);
visited[v]=1;
p=g.ver[v].firstarc;
while(p)
{
if(!visited[p->adjvex])
DFS(g,p->adjvex);
p=p->next;
}
}
//整个图的遍历
void DFST(graph g)
{
int v;
for(v=0;v<=g.vernum;v++)
visited[v]=0;
for(v=0;v<=g.vernum;v++)
if(visited[v]!=1)
DFS(g,v);
}
void main()
{
graph g;
create(g);
printf("深度遍历:\n");
DFST(g);
printf("\n");
}
------解决方案--------------------
void DFST(graph g)
{
int v;
for(v=0;v<g.vernum;v++)//去掉=
visited[v]=0;
for(v=0;v<g.vernum;v++)//去掉=
if(visited[v]!=1)
DFS(g,v);
}
printf("输入第%d条弧",k);//从0开始
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct arcnode
{
//弧结点定义
int adjvex;//该弧所指的顶点信息
struct arcnode *next;//指向下一条弧
}arcnode;
typedef struct vnode //顶点结点
{
int data; //顶点信息
arcnode *firstarc;//指向第一条依附该顶点的弧
}vernode ;
typedef vernode adjlist[100];
//图的结构定义
typedef struct
{
adjlist ver;
int vernum,arcnum;
}graph;
void create(graph &g)//创建无向图
{
int i,j,k;
int temp;
printf("请输入图的顶点和弧数:\n");
scanf("%d%d",&g.vernum,&g.arcnum);
temp=getchar();
printf("输入%d顶点\n",g.vernum);
for(i=0;i<g.vernum;i++)
{
printf("输入第%d顶点",i+1);
scanf("%d",&g.ver[i].data);
temp=getchar();
g.ver[i].firstarc=NULL;//边表置空
}
//建立边
printf("输入弧的信息\n");
printf("输入%d条弧",g.arcnum);
printf("\n");
for(k=0;k<g.arcnum;k++)
{
printf("输入第%d条弧",k+1);
scanf("%d%d",&i,&j);//输入表示弧<vi,vj>的顶点序
temp=getchar();
arcnode *p1,*p2;
p1=(arcnode *)malloc(sizeof(arcnode));//生成边表结点
p1->adjvex=j; //邻结点信息
p1->next=g.ver[i].firstarc;
g.ver[i].firstarc=p1;//将新结点插入到边表头部
p2=(arcnode *)malloc(sizeof(arcnode));//生成边表结点
p2->adjvex=i;
p2->next=g.ver[j].firstarc;
g.ver[i].firstarc=p2;
}
}
//图的深度优先搜索算法
int visited[MAXSIZE] ; //标志 1表示已访问
void DFS(graph g,int v)
{
arcnode *p;
printf("%d",g.ver[v].data);
visited[v]=1;
p=g.ver[v].firstarc;
while(p)
{
if(!visited[p->adjvex])
DFS(g,p->adjvex);
p=p->next;
}
}
//整个图的遍历
void DFST(graph g)
{
int v;
for(v=0;v<=g.vernum;v++)
visited[v]=0;
for(v=0;v<=g.vernum;v++)
if(visited[v]!=1)
DFS(g,v);
}
void main()
{
graph g;
create(g);
printf("深度遍历:\n");
DFST(g);
printf("\n");
}
------解决方案--------------------
void DFST(graph g)
{
int v;
for(v=0;v<g.vernum;v++)//去掉=
visited[v]=0;
for(v=0;v<g.vernum;v++)//去掉=
if(visited[v]!=1)
DFS(g,v);
}
printf("输入第%d条弧",k);//从0开始