实验六 图基本操作的编程实现

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

实验六图基本操作的编程实现

【实验目的】

图基本操作的编程实现

要求:

图基本操作的编程实现(2学时,验证型),掌握图的建立、遍历、插入、删除等基本操作的编程实现,存储结构可以在顺序结构、链接结构、联合使用多种结构等中任选,也可以全部实现。也鼓励学生利用基本操作进行一些应用的程序设计。

【实验性质】

验证性实验(学时数:2H)

【实验内容】

编程对图进行存储(邻接矩阵或邻接表都可以,由学生自由选择),之后可以询问任何两个结点之间是否有通路和路径数。

设计一个将图形转成邻接链表的程序。

设计一个深度优先搜索法来查找图形的程序。

设计一个广度优先搜索法来查找一个图形的程序。

鼓励开发出难度更高的程序。

【思考问题】

1.图的定义和特性?

2.图的主要存储结构是什么?是独立的某种还是多种数据结构的综合?

3.图的主要遍历思路是哪些?

4.举出图的应用范例?

【参考代码】

(一)将一个将图转成邻接矩阵的程序.

/*程序构思:*/

/*用户输入结点与各个边,再将边转成邻接矩阵。*/

#include

#define Max 6 /* 定义最大可输入的结点个数 */

int Graph[Max][Max]; /*图形邻接数组 */

/*===============================================*/

/*输出邻接矩阵数据===============================*/

/*===============================================*/

void print_M_Graph()

{

int i,j;

printf("Vertice");

for (i=0;i

printf("%3d",i);

printf("\n");

for(i=0;i

{

printf("%4d ",i);

for (j=0;j

printf("%3d" );

}

}

/*===============================================*/

/*以邻接矩阵建立图形=============================*/

/*===============================================*/

void Create_M_Graph(int Verticel,int Vertice2)

{

Graph[Verticel][Vertice2]=1; /* 将矩阵内容设为1 */

}

/*===============================================*/

/*主程序=========================================*/

/*===============================================*/

void main()

{

int Source; /*起始顶点*/

int Destination; /*终止顶点*/

int i,j;

for (i=0;i

for (j=0;j

Graph[i][i]=0;

while(1)

{

printf("please input the Edge's source:");

scanf("%d",&Source);

if(Source ==-1)

break;

printf("Please input the Edge's Destination:");

scanf("%d",&Destination);

if(Source==Destination) /* 出错:自身循环*/

printf("***Error***: Self Loop!! \n");

else if (Source >= Max || Destination >= Max) /* 出错:超出范围*/ printf ("***Error***: out of range!! \n");

else /*调用建立邻接数组 */

Create_M_Graph(Source,Destination);

}

printf("##Graph##\n");

; /*调用输出邻接数组数据*/

}

/*希望的结果 */

/*please input the Edge's source:0 */

/*Please input the Edge's Destination:4 */

/*please input the Edge's source:1 */

/*Please input the Edge's Destination:0 */

/*please input the Edge's source:1 */

/*Please input the Edge's Destination:4 */

/*please input the Edge's source:2 */

/*Please input the Edge's Destination:1 */

/*please input the Edge's source:3 */

/*Please input the Edge's Destination:2 */

/*please input the Edge's source:4 */

/*Please input the Edge's Destination:3 */

/*please input the Edge's source:-1 */

/*##Graph## */

/*Vertice 0 1 2 3 4 5 */

/* 0 0 0 0 0 1 0 */

/* 1 1 0 0 0 1 0 */

/* 2 0 1 0 0 0 0 */

/* 3 0 0 1 0 0 0 */

/* 4 0 0 0 1 0 0 */

/* 5 0 0 0 0 0 0 */

(二) 将一个将图转成邻接表的程序.

相关文档
最新文档