图的深度和广度优先遍历实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图的深度和广度优先遍历实验.txt你看得见我打在屏幕上的字,却看不到我掉在键盘上的泪!自己选择45°仰视别人,就休怪他人135°俯视着看你。#include
#include
#define MAXVER 21
typedef char vextype;
typedef struct listnode
{
int adjvex;
struct listnode * next;
}listnode;
typedef struct
{
vextype data;
listnode * first;
}headnode;
typedef struct
{
headnode vexs[MAXVER];
int vexnum,arcnum;
}ALgraph;
int visited[MAXVER];
ALgraph createALgraph()
{
ALgraph G;
int i,s,d;
listnode * p,* q;
printf("输入图的顶点数和边数:");
scanf("%d,%d",&G.vexnum,&G.arcnum);
for(i=1;i<=G.vexnum;i++)
{
printf("\n输入第%d个顶点信息:",i);
scanf("%c",G.vexs[i].data);
G.vexs[i].first=NULL;
}
for(i=1;i<=G.arcnum;i++)
{
printf("\n输入第%d条边的始点编号,终点编号:",i);
scanf("%d,%d",&s,&d);
p=(listnode *)malloc(sizeof(listnode));
p->adjvex=d;
p->next=G.vexs[s].first;
G.vexs[s].first=p;
q=(listnode *)malloc(sizeof(listnode));
q->adjvex=s;
q->next=G.vexs[d].first;
G.vexs[d].first=q;
}
return G;
}
void dfs(ALgraph G,int v)
{
listnode * p;
printf("%c ",G.vexs[v].data);
visited[v]=1;
p=G.vexs[v].first; //图深度优先遍历的递归算法!!!!!!!!!!!
while(p!=NULL)
{
if(visited[p->adjvex]==0)
dfs(G,p->adjvex);
p=p->next;
}
}
void DFS(ALgraph G,int v)
{
listnode * stack[MAXVER],*p;
int top=0;
printf("%c",G.vexs[v].data);
visited[v]=1;
p=G.vexs[v].first;
while(top>0 || p!=NULL)
{
while(p!=NULL)
if(visited[p->adjvex]!=0)
p=p->next;
else
{
printf(",%c",G.vexs[p->adjvex].data);
visited[p->adjvex]=1;
stack[++top]=p;
p=G.vexs[p->adjvex].first;
}
if(top>0)
{
p=stack[top--];
p=p->next;
}
}
}
void dfsTraverse(ALgraph G)
{
int v;
for(v=1;v<=G.vexnum;v++)
visited[v]=0;
for(v=1;v<=G.vexnum;v++)
if(visited[v]==0)
DFS(G,v);//dfs(G,v);//
}
void BFS(ALgraph G,int v)
{
int queue[MAXVER],front,rear;
listnode * p;
front=rear=0;
printf("%c",G.vexs[v].data);
visited[v]=1;
queue[++rear]=v;
while(front!=rear)
{
v=queue[++front];
p=G.vexs[v].first;
while(p!=NULL)
{
if(visited[p->adjvex]==0)
{
v=p->adjvex;
printf(",%c",G.vexs[v].data);
visited[v]=1;
queue[++rear]=v;
}
p=p->next;
}
}
}
void BFSTraverse(ALgraph G)
{
int v;
for(v=1;v<=G.vexnum;v++)
visited[v]=0;
for(v=1;v<=G.vexnum;v++)
if(visited[v]==0)
BFS(G,v);
}
void main()
{
ALgraph G;
listnode a1,a2,a3;
listnode b1,b2,b3,b4;
listnode c1,c2,c3,c4,c5;
listnode d1,d2,d3;
listnode e1;
listnode f1;
listnode g1;
listnode h1,h2;
G.vexnum=8;
G.arcnum=10;
G.vexs[1].data='A';
G.vexs[2].data='B';
G.vexs[3].data='C';
G.vexs[4].data='D';
G.vexs[5].data='E';
G.vexs[6].data='F';
G.
vexs[7].data='G';
G.vexs[8].data='H';
G.vexs[1].first=&a1;
a1.adjvex=4;
a1.next=&a2;
a2.adjvex=3;
a2.next=&a3;
a3.adjvex=2;
a3.next=NULL;
G.vexs[2].first=&b1;
b1.adjvex=6;
b1.next=&b2;
b2.adjvex=5;
b2.next=&b3;
b3.adjvex=3;
b3.next=&b4;
b4.adjvex=1;
b4.next=NULL;
G.vexs[3].first=&c1;
c1.adjvex=8;
c1.next=&c2;
c2.adjvex=7;
c2.next=&c3;
c3.adjvex=4;
c3.next=&c4;
c4.adjvex=2;
c4.next=&c5;
c5.adjvex=1;
c5.next=NULL;
G.vexs[4].first=&d1;
d1.adjvex=8;
d1.next=&d2;
d2.adjvex=3;
d2.next=&d3;
d3.adjvex=1;
d3.next=NULL;
G.vexs[5].first=&e1;
e1.adjvex=2;
e1.next=NULL;
G.vexs[6].first=&f1;
f1.adjvex=2;
f1.next=NULL;
G.vexs[7].first=&g1;
g1.adjvex=3;
g1.next=NULL;
G.vexs[8].first=&h1;
h1.adjvex=4;
h1.next=&h2;
h2.adjvex=1;
h2.next=NULL;
dfsTraverse(G);
printf("\n\n");
BFSTraverse(G);
printf("\n\n");
}