您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页范例_许运生(1)

范例_许运生(1)

来源:爱玩科技网


深 圳 大 学 实 验 报 告

课程名称: 数据结构实验与课程设计

实验项目名称: 图的最短路径实验

学院: 计算机与软件学院

专业: 计科

指导教师: 杨芳

报告人: 许运生 学号:2013150381 班级: 08

实验时间: 2014-11-6

实验报告提交时间: 2014/11/6

教务处制

一、实验目的

1、掌握图结构的(邻接矩阵)输入方法

2、掌握图结构的说明、创建以及图的存储表示(邻接矩阵) 3、掌握最短路径算法原理

4、掌握最短路径算法的编程实现方法

二、实验要求

1、熟悉C++语言编程

2、熟悉图的邻接矩阵存储表示 3、熟悉最短路径算法原理

4、熟练使用C++语言,实现最短路径算法

三、实验内容 本次实验有两项内容:

(一)图的最短路径实验 1、问题描述

给定一个顶点(始点),求该顶点(始点)到(连通)图中其它顶点的最短路径。 2、算法

⑴、初始化: S ← {v1 }; // 始点送S

D[i] ← arc[1][i], i = 2, 3, …, n; // 从v1到vi的距离 P[i] = {1,i} // 从v1到vi的路径 ⑵、求出最短路径的长度:

D[j] ← min { D[i] }, iV-S ; S←S U {j }; ⑶、修改:

if (D[i] > D[j] + arc[j][i]) {

D[i] = D[j]+arc[j][i];

P[i] = P[j] U {i} ; } iV-S // 更新从v1到vi的路径

⑷、判断:若 S = V, 则算法结束,否则转 ⑵。

3、输入

第一行:样本顶点个数,假设为n。 第二行,n个顶点(用空格隔开)

第三行开始到n+2行:每一行是某顶点(按第二行的输入为序)与其它顶点的距离(-1表示无穷大)

第n+3行:开始顶点

4、输入样本

5

a b c d e -1 5 -1 7 15 -1 -1 5 -1 -1 -1 -1 -1 -1 1 -1 -1 2 -1 -1

-2-

-1 -1 -1 -1 -1 a 5、输出

共计n行(图中顶点数目)

每行是(与输入顺序相同)某顶点(距离):路径(顶点序列,用空格隔开,回车前无空格)

6、输出样本

a(0): b(5): a b c(9): a d c d(7): a d

e(10): a d c e (二)拓扑排序(选作)

1、问题描述

已知有向图,顶点从0开始编号,求它的求拓扑有序序列。

2、拓扑排序算法:给出有向图邻接矩阵

(1)逐列扫描矩阵,找出入度为0且编号最小的顶点v (2)输出v,并标识v已访问 (3)把矩阵第v行全清0

重复上述步骤,直到所有顶点输出为止

3、输入

第一行输入一个整数t,表示有t个有向图 第二行输入n,表示图有n个顶点

第三行起,输入n行整数,表示图对应的邻接矩阵 以此类推输入下一个图的顶点数和邻接矩阵

4、输出

每行输出一个图的拓扑有序序列

5、样本输入 2 5

0 1 0 1 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 7

0 0 0 0 0 0 0

-3-

1 0 1 1 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 1 0

6、样本输出 0 1 3 2 4 4 6 5 1 3 2 0

四、程序清单 程序一:

#include using namespace std; /**

实验十一 图的最短路径实验 */ //常数

const int MAX_VERT = 20; const int MAX_NUM = 1000; //数组

bool final[MAX_VERT]; int Dest[MAX_VERT];

char Path[MAX_VERT][MAX_VERT]; //图结构体

struct Graphic{ int vertNum; char vertValue[MAX_VERT]; int AdjMatrix[MAX_VERT][MAX_VERT]; };

//图的初始化

void initGraphic(Graphic &G, int n){ int i, j; G.vertNum = n; //输入顶点的值 for(i = 1; i <= G.vertNum; i++) cin>>G.vertValue[i]; //输入顶点的邻接矩阵 for(i = 1; i <= G.vertNum; i++){ for(j = 1; j <= G.vertNum; j++){ cin>>G.AdjMatrix[i][j]; if(G.AdjMatrix[i][j] == -1)

-4-

G.AdjMatrix[i][j] = MAX_NUM; } } }

//最短路径查找

void shortestPath(Graphic G, char vert){ int i, j, k, cv, Min; //查找初始顶点的下标 for(i = 1; i <= G.vertNum; i++){ if(G.vertValue[i] == vert){ cv = i; break; } } //访问集初始化和路径集初始化 for(i = 1; i <= G.vertNum; i++){ Path[i][0] = 0; Dest[i] = MAX_NUM; if(G.AdjMatrix[cv][i] < MAX_NUM){ Dest[i] = G.AdjMatrix[cv][i]; Path[i][1] = G.vertValue[cv]; Path[i][2] = G.vertValue[i]; Path[i][0] = 2; } final[i] = false; } // final[cv] = true; Dest[cv] = 0; //查找路径最短,查找G.vertNum-1次 for(i = 1; i < G.vertNum; i++){ Min = MAX_NUM; for(j = 1; j <= G.vertNum; j++){ if(!final[j] && Dest[j] < Min){ cv = j; Min = Dest[j]; } } final[cv] = true; //更新最短路径 for(j = 1; j <= G.vertNum; j++){ if((!final[j]) && (Min + G.AdjMatrix[cv][j] < Dest[j])){ Dest[j] = Min + G.AdjMatrix[cv][j]; for(k = 0; k <= Path[cv][0]; k++){

-5-

Path[j][k] = Path[cv][k]; } Path[j][0]++; Path[j][Path[j][0]] = G.vertValue[j]; } } } //输出初始顶点到其他各顶点的最短路径 for(i = 1; i <= G.vertNum; i++){ cout<//主函数 int main() { int n; char ch; Graphic G; //文本输入 //freopen(\"cin.txt\ //顶点个数 cin>>n; //图的初始化 initGraphic(G, n); //最短路径查找,初始顶点为ch cin>>ch; shortestPath(G, ch); //结束 return 0; } 程序二:

#include using namespace std; //常量

const int MAX_VERT = 10; //图的结构体 struct Graphic{ int vertNum; int VertValue[MAX_VERT];

-6-

int AdjMatrix[MAX_VERT][MAX_VERT]; bool visited[MAX_VERT]; };

//图初始化

void initGraphic(Graphic &G, int n){ G.vertNum = n; int i, j; //输入邻接矩阵 for(i = 0; i < G.vertNum; i++){ for(j = 0; j < G.vertNum; j++) cin>>G.AdjMatrix[i][j]; } //顶点赋值 for(i = 0; i< G.vertNum; i++){ G.VertValue[i] = i; G.visited[i] = false; } }

//拓扑排序

void TopoSort(Graphic G){ int i, j, k, m; for(m = 0; m //主函数 int main() { int t, n, i; Graphic G[2]; //文本输入 //freopen(\"cin2.txt\

-7-

}

//输入有向图个数 cin>>t;

for(i = 0; i < t; i++){ //输入顶点个数 cin>>n; //图初始化 initGraphic(G[i], n); //拓扑排序 TopoSort(G[i]); }

//结束 return 0;

五、程序运行时截图 程序一

程序二

六、实验心得与体会(实验中遇到的问题及解决方案,或写点感想) 路径的更新比较模糊。。。

-8-

指导教师批阅意见: 成绩评定: 指导教师签字: 年 月 日 备注: -9-

注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。

2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。

-10-

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务