数据结构实验图的储存与遍历Word文档下载推荐.docx
《数据结构实验图的储存与遍历Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构实验图的储存与遍历Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
V4
三、附录:
在此贴上调试好的程序。
#include<
>
#defineM100
typedefstructnode
{
charvex[M][2];
intedge[M][M];
intn,e;
}Graph;
intvisited[M];
Graph*Create_Graph()
{Graph*GA;
inti,j,k,w;
GA=(Graph*)malloc(sizeof(Graph));
printf("
请输入矩阵的顶点数和边数(用逗号隔开):
\n"
);
scanf("
%d,%d"
&
GA->
n,&
e);
请输入矩阵顶点信息:
for(i=0;
i<
n;
i++)
scanf("
%s"
(GA->
vex[i][0]),&
vex[i][1]));
for(i=0;
i++)
for(j=0;
j<
j++)
GA->
edge[i][j]=0;
for(k=0;
k<
e;
k++)
{printf("
请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):
"
k+1);
scanf("
%d,%d,%d"
i,&
j,&
w);
edge[i][j]=w;
}
return(GA);
}
voiddfs(Graph*GA,intv)
{inti;
printf("
%c%c\n"
GA->
vex[v][0],GA->
vex[v][1]);
visited[v]=1;
for(i=0;
i<
i++)
if(GA->
edge[v][i]==1&
&
visited[i]==0)dfs(GA,i);
voidtraver(Graph*GA)
visited[i]=0;
if(visited[i]==0)
dfs(GA,i);
voidbfs(Graph*GA,intv)
{intj,k,front=-1,rear=-1;
intQ[M];
rear=rear+1;
Q[rear]=v;
while(front!
=rear)
{front=front+1;
k=Q[front];
for(j=0;
j<
j++)
edge[k][j]==1&
visited[j]==0)
{printf("
vex[j][0],GA->
vex[j][1]);
visited[j]=1;
Q[rear]=j;
}
voidtraver1(Graph*GA)
for(i=0;
i++)
if(visited[i]==0)
bfs(GA,i);
typedefstructNODE
{intadjvex;
structNODE*next;
}ENode;
typedefstructNODE1
{charvex[2];
ENode*first;
}VexNode;
typedefstructFS1
VexNodeGL[M];
intbian,top;
}FS;
FS*CreateGL()
{FS*kk=(FS*)malloc(sizeof(FS));
inti,j,k;
ENode*s;
请输入顶点数和边数(用逗号隔开):
kk->
top,&
bian);
请输入顶点信息:
top;
{scanf("
kk->
GL[i].vex);
kk->
GL[i].first=NULL;
请输入边的信息(i,j):
for(k=0;
bian;
k++)
\n%d,%d"
j);
s=(ENode*)malloc(sizeof(ENode));
s->
adjvex=j;
next=kk->
GL[i].first;
GL[i].first=s;
returnkk;
voidDFS(FS*kk,intv)
{ENode*w;
inti;
%s\n"
GL[v].vex);
w=kk->
GL[v].first;
while(w!
=NULL)
{i=w->
adjvex;
DFS(kk,i);
w=w->
next;
voidTRAVER(FS*kk)
DFS(kk,i);
voidBFS(FS*kk,intv)
{intQ[M],front=-1,rear=-1;
ENode*w;
inti,k;
=rear)
k=Q[front];
GL[k].first;
while(w!
=NULL)
if(visited[i]==0)
{visited[i]=1;
Q[rear]=i;
voidTRAVER1(FS*kk)
i++)visited[i]=0;
i<
BFS(kk,i);
intmain()
inti=0;
Graph*p;
FS*q;
while(i=1)
{
/*建立菜单*/
charjz[30]={"
1.创建邻接矩阵"
};
charjd[30]={"
2.邻接矩阵DFS遍历"
charjb[30]={"
3.邻接矩阵BFS遍历"
charbg[30]={"
4.创建邻接表"
charbd[30]={"
5.邻接表DFS遍历"
charbb[30]={"
6.邻接表BFS遍历"
chartc[30]={"
7.退出"
charmn[30]={"
菜单"
intl=strlen(jd);
into=strlen(mn);
intm,n;
printf("
for(m=0;
m<
=(2*l-o)/2;
m++)
printf("
"
mn);
=2*l;
*"
*%s*\n*%s*\n*%s*\n*%s*\n*%s*\n*%s*\n*%s*\n"
jz,jd,jb,bg,bd,bb,tc);
/*选择功能*/
请输入所需功能序号:
%d"
n);
switch(n){
case1:
p=Create_Graph();
break;
case2:
traver(p);
case3:
traver1(p);
case4:
q=CreateGL();
case5:
TRAVER(q);
case6:
TRAVER1(q);
case7:
return0;
default:
printf("
输入功能序号有误!
}
四、运行结果:
在此把运行结果从屏幕上拷下来贴在此
五、心得体会:
测试数据要注意现实中矩阵是从1开始,而数组里是从0开始。