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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验目的

掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(DFS)和广度优先遍历(BFS)操作的实现。

二、实验内容与实验步骤

题目1:对以邻接矩阵为存储结构的图进行DFS 和BFS 遍历

问题描述:以邻接矩阵为图的存储结构,实现图的DFS 和BFS 遍历。

基本要求:建立一个图的邻接矩阵表示,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示

题目2:对以邻接表为存储结构的图进行DFS 和BFS 遍历

问题描述:以邻接表为图的存储结构,实现图的DFS 和BFS 遍历。

基本要求:建立一个图的邻接表存贮,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示

三、附录:

在此贴上调试好的程序。

#include

#include

#include

⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=010*******

010101000100010A

#define M 100

typedef struct node

{

char vex[M][2];

int edge[M ][ M ];

int n,e;

}Graph;

int visited[M];

Graph *Create_Graph()

{ Graph *GA;

int i,j,k,w;

GA=(Graph*)malloc(sizeof(Graph));

printf ("请输入矩阵的顶点数和边数(用逗号隔开):\n");

scanf("%d,%d",&GA->n,&GA->e);

printf ("请输入矩阵顶点信息:\n");

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

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

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

for (j = 0;jn;j++)

GA->edge[i][j] = 0;

for (k = 0;ke;k++)

{ printf ("请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):",k+1);

scanf ("%d,%d,%d",&i,&j,&w);

GA->edge[i][j] = w;

}

return(GA);

}

void dfs(Graph *GA, int v)

{ int i;

printf("%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; in;i++)

if(visited[i]==0)

dfs(GA, i);

}

void bfs( Graph *GA, int v)

{ int j,k,front=-1,rear=-1;

int Q[M];

printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]); visited[v]=1;

rear=rear+1;

Q[rear]=v;

while (front!=rear)

{ front=front+1;k=Q[front];

for (j=0; jn; j++)

if (GA->edge[k][j]==1 && visited[j]==0)

{ printf("%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; in;i++)

visited[i]=0;

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

if (visited[i]==0)

bfs(GA, i);

}

typedef struct NODE

{ int adjvex;

struct NODE *next;

}ENode;

typedef struct NODE1

{ char vex[2];

ENode *first;

} VexNode;

typedef struct FS1

{

VexNode GL[M];

int bian,top;

}FS;

FS *CreateGL( )

{ FS *kk=(FS *)malloc(sizeof(FS));

int i,j,k;

ENode *s;

printf("请输入顶点数和边数(用逗号隔开):\n");

scanf("%d,%d",&kk->top, &kk->bian);

printf("请输入顶点信息:\n");

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

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

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

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

for (k=0;kbian;k++)

{ scanf("\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;

}

相关文档
最新文档