数据结构实验-图的储存与遍历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程实验报告
学号:
: 实验日期:2016.1.7 实验名称: 图的存贮与遍历
一、实验目的
掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示, 以及在此两 种常用存储方式下深度优先遍历(DFS 和广度优先遍历(BFS 操作的实现。
、实验内容与实验步骤 题目1:对以邻接矩阵为存储结构的图进行 DFS 和BFS 遍历
问题描述:以邻接矩阵为图的存储结构,实现图的 DFS 和BFS 遍历。
基本要求:建立一个图的邻接矩阵表示,输出顶点的一种
DFS 和BFS 序列
测试数据:如图所示
0 10 0 0
1 0 0 0 1
A 0 10 10
1 0 0 0 0
0 0 0 1 0
题目2:对以邻接表为存储结构的图进行 DFS 和BFS 遍历
问题描述:以邻接表为图的存储结构,实现图的 DFS 和BFS 遍历。
基本要求:建立一个图的邻接表存贮,输出顶点的一种 DFS 和BFS 序列 测试数据:如图所示
在此贴上调试好的程序
#i nclude
#i nclude
#i ncludevstri ng.h>V0 V1
V2 V3 V4
1 A 0 1
4
A
3 A 0 A
3
A
#define M 100
typedef struct node
{
char vex[M][2];
int edge[M ][ M ];
int n ,e;
}Graph;
in t visited[M];
Graph *Create_Graph()
{ Graph *GA;
int i,j,k,w;
GA=(Graph*)malloc(sizeof(Graph));
printf ("请输入矩阵的顶点数和边数(用逗号隔开):\n");
sca nf("%d,%d", &GA-> n,&GA->e);
printf ("请输入矩阵顶点信息:\n");
for(i = 0;i
scan f("%s",&(GA->vex[i][0]),&(GA->vex[i][1]));
for (i = 0;i
for (j = 0;j
for (k = 0;k
{ printf ("请输入第%4条边的顶点位置(i,j)和权值(用逗号隔开): ",k+1);
sca nf ("%d,%d,%d",&i,&j, &w);
GA->edge[i][j] = w;
}
return(G
A);
}
void dfs(Graph *GA, i nt v)
{ int i;
prin tf("%c%c\n",GA->vex[v][0],GA->vex[v][1]);
visited[v]=1;
for(i=0; i
if (GA->edge[v][i]==1 && visited[i]==0) dfs(GA, i);
}
void traver(Graph *GA)
{ int i;
for(i=0; i
visited[i]=0;
for(i=0; i
if(visited[i]==0) dfs(GA, i);
}
void bfs( Graph *GA, i nt v)
{ int j,k,fro nt=-1,rear=-1;
int Q[M];
prin tf("%c%c\n",GA->vex[v][0],GA->vex[v][1]); visited[v]=1;
rear=rear+1;
Q[rear]=v;
while (fron t!=rear)
{ fron t=fro nt+1;k=Q[fro nt];
for (j=0; j
if (GA->edge[k][j]==1 && visited[j]==0)
{ prin tf("%c%c\n",GA->vex[j][0],GA->vex[j][1]); visited[j]=1;
rear=rear+1;
Q[rear]=j;
}
}
}
void traver1(Graph *GA)
{ int i;
for (i=0; i
visited[i]=0;
for (i=0; i
if (visited[i]==0)
bfs(GA, i);
typedef struct NODE
{ int adjvex;
struct NODE *n ext;
}ENode;
typedef struct NODE1
{ char vex[2];
ENode *first;
} VexNode;
typedef struct FS1
{
VexNode GL[M];
int bia n,top;
}FS;
FS *CreateGL()
{ FS *kk=(FS *)malloc(sizeof(FS));
int i,j,k;
ENode *s;
printf("请输入顶点数和边数(用逗号隔开):\n");
sca nf("%d,%d",&kk->top, & kk->bia n);
printf("请输入顶点信息:\n");
for (i=0; i
{ sca nf("%s",kk->GL[i].vex);
kk->GL[i].first=NULL; }
printf("请输入边的信息(i,j): \n");
for (k=0;k
{ sca nf("\n%d,%d",&i,&j);
s =(ENode*)malloc(sizeof(ENode)); s->adjvex=j;
s-> next=kk->GL[i].first;
kk->GL[i].first =s;
}
return kk;
void DFS(FS *kk, i nt v)
{ ENode *w; int i;
prin tf("%s\n",kk->GL[v].vex); visited[v]=1;
w=kk->GL[v].first ;
while (w!=NULL)