实验11图的最短路径实验报告1文档格式.docx
- 文档编号:22627949
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:12
- 大小:54.08KB
实验11图的最短路径实验报告1文档格式.docx
《实验11图的最短路径实验报告1文档格式.docx》由会员分享,可在线阅读,更多相关《实验11图的最短路径实验报告1文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
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]},iV-S;
S←SU{j};
⑶、修改:
if(D[i]>
D[j]+arc[j][i]){
D[i]=D[j]+arc[j][i];
P[i]=P[j]U{i};
}iV-S//更新从v1到vi的路径
⑷、判断:
若S=V,则算法结束,否则转⑵。
3、输入
第一行:
样本顶点个数,假设为n。
第二行,n个顶点(用空格隔开)
第三行开始到n+2行:
每一行是某顶点(按第二行的输入为序)与其它顶点的距离(-1表示无穷大)
第n+3行:
开始顶点
4、输入样本
5
abcde
-15-1715
-1-15-1-1
-1-1-1-11
-1-12-1-1
-1-1-1-1-1
a
5、输出
共计n行(图中顶点数目)
每行是(与输入顺序相同)某顶点(距离):
路径(顶点序列,用空格隔开,回车前无空格)
6、输出样本
a(0):
b(5):
ab
c(9):
adc
d(7):
ad
e(10):
adce
(二)拓扑排序(选作)
已知有向图,顶点从0开始编号,求它的求拓扑有序序列。
2、拓扑排序算法:
给出有向图邻接矩阵
(1)逐列扫描矩阵,找出入度为0且编号最小的顶点v
(2)输出v,并标识v已访问
(3)把矩阵第v行全清0
重复上述步骤,直到所有顶点输出为止
第一行输入一个整数t,表示有t个有向图
第二行输入n,表示图有n个顶点
第三行起,输入n行整数,表示图对应的邻接矩阵
以此类推输入下一个图的顶点数和邻接矩阵
4、输出
每行输出一个图的拓扑有序序列
5、样本输入
2
01011
00100
00001
00000
7
0000000
1011000
1000000
1010000
0000011
0100000
0001010
6、样本输出
01324
4651320
四、程序清单
1:
#include<
iostream>
usingnamespacestd;
#defineMAX10
#defineIni100
charPath[MAX][MAX];
intDest[MAX];
typedefstruct{
charVertex[MAX];
intVertexNum;
intAdj[MAX][MAX];
}Graph;
GraphG;
voidCreateGraph(Graph&
G){
inti;
cin>
>
G.VertexNum;
for(i=1;
i<
=G.VertexNum;
i++){
G.Vertex[i];
}
for(intj=1;
j<
j++){
G.Adj[i][j];
if(G.Adj[i][j]==-1)
G.Adj[i][j]=Ini;
}
voidCreatePath(Graph&
G,charStartVertex){
intStartVex,MinDest,i,j,m,CurrentVex;
charFinal[MAX];
if(G.Vertex[i]==StartVertex){
StartVex=i;
break;
Path[i][0]=0;
Dest[i]=Ini;
if(G.Adj[StartVex][i]<
Ini){
Dest[i]=G.Adj[StartVex][i];
Path[i][1]=G.Vertex[StartVex];
Path[i][2]=G.Vertex[i];
Path[i][0]=2;
Final[i]='
F'
;
Dest[StartVex]=0;
Final[StartVex]='
T'
i<
i++){
MinDest=Ini;
for(j=1;
j<
j++){
if(Final[j]=='
){
if(Dest[j]<
MinDest){
CurrentVex=j;
MinDest=Dest[j];
Final[CurrentVex]='
j++){
if((Final[j]=='
)&
&
(MinDest+G.Adj[CurrentVex][j]<
Dest[j])){
Dest[j]=MinDest+G.Adj[CurrentVex][j];
for(m=0;
m<
=Path[CurrentVex][0];
m++)
Path[j][m]=Path[CurrentVex][m];
Path[j][0]++;
Path[j][m]=G.Vertex[j];
voidShow(Graph&
intj;
i++)
{
cout<
<
G.Vertex[i]<
"
("
Dest[i]<
):
=Path[i][0];
j++)
"
Path[i][j];
endl;
intmain()
{
//freopen("
cjin.txt"
"
r"
stdin);
chara;
CreateGraph(G);
a;
CreatePath(G,a);
Show(G);
return0;
2:
#include<
usingnamespacestd;
constintMAX_VERT=10;
structGraphic{
intvertNum;
intVertValue[MAX_VERT];
intAdjMatrix[MAX_VERT][MAX_VERT];
boolvisited[MAX_VERT];
};
voidinitGraphic(Graphic&
G,intn){
G.vertNum=n;
inti,j;
for(i=0;
i<
G.vertNum;
i++){
for(j=0;
j<
j++)
G.AdjMatrix[i][j];
G.VertValue[i]=i;
G.visited[i]=false;
voidTopoSort(GraphicG){
inti,j,k,m;
for(m=0;
m<
G.vertNum;
m++){
j++){
if(G.AdjMatrix[j][i])
if(j==G.vertNum&
!
G.visited[i])
for(k=0;
k<
k++)
G.AdjMatrix[i][k]=0;
G.visited[i]=true;
intmain()
intt,n,i;
GraphicG[2];
freopen("
tin1.txt"
t;
t;
n;
initGraphic(G[i],n);
TopoSort(G[i]);
return0;
五、程序运行时截图
6、实验心得与体会(实验中遇到的问题及解决方案,或写点感想)
指导教师批阅意见:
成绩评定:
指导教师签字:
年月日
备注:
注:
1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 11 路径 报告