图形数据结构实验

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

淮海工学院计算机科学系实验报告书

课程名:《数据结构》

题目:图形数据结构实验

班级:

学号:

姓名:

图形数据结构实验报告要求

1目的与要求:

1)掌握图的邻接矩阵、邻接表、十字链表、邻接多重链表存储结构表示及其创建算法的c语言实现;

2)掌握图的深度优先搜索遍历算法和图的广度优先搜索遍历算法及C语言实现(预习);

3)掌握AOV-网普里姆构造最小生成树算法的数据结构和算法实现(待学);

4)掌握AOE-网关路经的生成算法和实现(待学);

5)按照实验题目要求独立正确地完成实验内容(提交程序清单及相关实验数据与运行结果);

6)认真书写实验报告,并按时提交(第12周周一提交)。

2 实验内容或题目

题目:一、图形数据结构实验——图的建立与遍历。

内容:

1)使用邻接矩阵和邻接表储表示分别实现如下给定的图1和或图2所示图的物理存储结构。

2)在1)所建立的图形存储结构上分别实现深度优先搜索遍历和广度优先搜索遍历,并给出遍历结果(序列)。

题目:二、连通网的最小生成树及其应用实验(暂不做)

内容:对下图所示通信连通网,按照普里姆算法实现其最小生成树。

V1

v6

v5

v4

v3

V2

6

5

1

3

5

6

6

4

2

5

例2 有向图

3 实验步骤与源程序

邻接矩阵

#include

#include

#define MAX_VERTEX_NUM 8

#define OK 1

#define FALSE 0

#define Error -1

#define AdjType int

#define OtherInfo int

int visited[MAX_VERTEX_NUM];

#define TRUE 1

#define MAXSIZE 6

typedef struct

{

int element[MAXSIZE];

int front;

int rear;

}SeqQueue;

typedef enum{DG,DN,UDG,UDN} GraphKind; typedef char VertexData;

typedef struct ArcNode

{

AdjType adj;

OtherInfo info;

}ArcNode;

typedef struct

{

VertexData vexs[MAX_VERTEX_NUM];

ArcNode arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; int vernum,arcnum;

GraphKind kind;

}AdjMatrix;

int LocateVertex(AdjMatrix *G,VertexData v) {

int j=Error;

int k;

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

if(G->vexs[k]==v)

{

j=k;

break;

}

return (j);

int CreatUDG(AdjMatrix * G)

{

int i,j,k;

VertexData v1,v2;

cout<<"输入无向图的顶点数和边数:"<>G->vernum;

cin>>G->arcnum;

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

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

G->arcs[i][j].adj=0;

cout<<"输入图的顶点:"<

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

{

cin>>G->vexs[i];

}

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

{

cout<<"输入一条边的两顶点:"<

cin>>v1;

cin>>v2;

i=LocateVertex(G,v1);

j=LocateVertex(G,v2);

G->arcs[i][j].adj =1;

G->arcs[j][i].adj=G->arcs[i][j].adj ;

}

return (OK);

}

void Print(AdjMatrix * G)

{

int i,j;

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

{

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

cout<arcs[i][j].adj<<" ";

cout<

}

}

void DepthFirstSearch(AdjMatrix * G,int v0) {

cout<vexs[v0]<

visited[v0]=OK;

for(int vi=1;vivernum;vi++)

{

if(!visited[vi] && G->arcs[v0][vi].adj==1) DepthFirstSearch(G,vi);

相关文档
最新文档