实验六 图的创建及应用(I)

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

姓名学号

算本次实验主函数采用循环选择结构,主函数调用自己编写的头文件DataStructure_Graph.h中的相关功能函数,完成实验要求。

主程序结构:

1、邻接矩阵表示法:

1、创建有向图;//调用CreateGraph(MG)创建有向图

2、显示图信息;//调用DisplayGraph(MG) 显示图信息

3、返回上一界面;

2、邻接表表示法:

1、创建有向图; //调用CreateGraph(ALG)创建有向图

2、显示图信息;//调用DisplayGraph(ALG) 显示图信息

3、返回上一界面;

3、基于深度优先搜索判断是否存在指定位置的路径:

1、使用已创建的邻接表表示的图进行搜索判断;//调用exist_path_DFS(ALG, i, j)搜索

2、创建新的图进行搜索判断;//创建新的有向图,并调用exist_path_DFS(R_ALG, i, j)搜索

3、返回上一界面;

4、退出程序

创建图的算法分析

邻接矩阵结构创建图:

首先由键盘输入待创建的图的顶点数,弧数以及是否含有弧信息,然后由顶点数控制循环构造顶点向量,接着由顶点数控制循环初始化邻接矩阵(adj=0,info=NUll),再次输入弧信息,此时将输入的弧的弧头和弧尾与顶点信息进行匹配,从而确定弧在邻接矩阵中的位置(有弧时为1),如果输入的弧有信息的话,在进行有无弧的判断写邻接矩阵时进行绑定,有键盘输入即可。

邻接表结构创建图:

首先由键盘输入待创建的图的顶点数,弧数,然后由顶点数控制循环初始化顶点信息(顶点数据信息及顶点第一条弧指针(firstarc = NULL)),接着由弧数控制循环输入弧头和弧尾顶点,与之前建立的顶点信息进行匹配,从而确定弧头和弧尾的位置信息,此时生成一个弧结点类型的存储空间,采用单链表中在表头插入新结点的方法,将弧的信息插入到顶点的第一条弧之后,如同此法,对每个顶点都进行以上操作,这就建立了图的邻接表结构。

深度优先搜索判断是否存在指定位置的路径算法分析

首先判断指定的两个位置向量是否相等,如果相等,则肯定有路径相连,否则从指定的弧头结点开始搜索,将该顶点访问过的弧的访问标志置1,任何到该弧的弧头顶点进行如上操作,当搜索该顶点的所有弧都没有找到则返回0,然后返回上一顶点,对该顶点的其他弧进行访问。当指定顶点的所有弧都被搜索访问过都没有找到,此时程序返回0。

cout << endl << ">请选择功能:";

cin >> ch1;

switch (ch1)

{

case'1': //创建有向图

{

system("cls");

CreateGraph(MG);

cout << "操作完毕!" << endl;

system("pause");

system("cls");

continue;

}

case'2': //显示图信息

{

system("cls");

DisplayGraph(MG);

cout << "操作完毕!" << endl;

system("pause");

system("cls");

continue;

}

case'3': //返回上一界面

{

break;

}

default:

{

system("cls");

cout << "输入错误,请重新输入!" << endl;

continue;

}

}

system("cls");

break;

}

break;

}

case'2':

{

system("cls");

while (1)

{

minor_menu2();

char ch1;//二层菜单输入选择

cout << endl << ">请选择功能:";

cin >> ch1;

switch (ch1)

{

case'1'://创建图信息

{

system("cls");

CreateGraph(ALG);

cout << "操作完毕!" << endl;

system("pause");

system("cls");

continue;

}

case'2'://显示图信息

{

system("cls");

DisplayGraph(ALG);

cout << "操作完毕!" << endl;

system("pause");

system("cls");

continue;

}

case'3': //返回上一界面

{

break;

}

default:

{

system("cls");

cout << "输入错误,请重新输入!" << endl;

continue;

}

}

system("cls");

break;

}

break;

}

case'3':

{

system("cls");

while (1)

{

minor_menu3();

ALGraph R_ALG;

int i, j; //待搜索的顶点的位置

char ch1; //二层菜单输入选择

cout << endl << ">请选择功能:";

cin >> ch1;

switch (ch1)

{

case'1'://使用已创建的邻接表表示的图进行搜索

{

system("cls");

cout << "请输入待搜索的顶点v(i) 顶点v(j)(以空格分隔):";

cin >> i>> j;

int flag = exist_path_DFS(G, i, j);

if (flag)

cout << "搜索成功!存在顶点v(i):" << G.vertices[i].data << "顶点v(j):" << G.vertices[j].data << "的路径" << endl;

else

cout << "搜索失败!不存在顶点v(i):" << G.vertices[i].data << "到顶点v(j):" << G.vertices[j].data << "的路径" << endl;

cout << "操作完毕!" << endl;

system("pause");

system("cls");

continue;

}

case'2': //创建新图进行搜索

{

system("cls");

相关文档
最新文档