数据结构实验-图的储存与遍历

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 n;i++)

scan f("%s",&(GA->vex[i][0]),&(GA->vex[i][1]));

for (i = 0;i n;i++)

for (j = 0;j n;j++) GA->edge[i][j] = 0;

for (k = 0;ke;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; in; i++)

if (GA->edge[v][i]==1 && visited[i]==0) dfs(GA, i);

}

void traver(Graph *GA)

{ int i;

for(i=0; in; i++)

visited[i]=0;

for(i=0; i n;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; jn; 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 n;i++)

visited[i]=0;

for (i=0; in; 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; itop; i++)

{ sca nf("%s",kk->GL[i].vex);

kk->GL[i].first=NULL; }

printf("请输入边的信息(i,j): \n");

for (k=0;kbia n;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)

相关文档
最新文档