数据结构实验报告 最短路径Word文档下载推荐.docx
- 文档编号:18359896
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:16
- 大小:60.40KB
数据结构实验报告 最短路径Word文档下载推荐.docx
《数据结构实验报告 最短路径Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告 最短路径Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
此数组记录图中的点到源点的距离。
这个数组里面存放的值是不断进行更新的。
其中N为图中结点的个数。
3、程序简单模板
只是参考,不需要照着这个来写
//最短路径
#ifndefMYGRAPH_H_
#defineMYGRAPH_H_
classMyGraph
{
public:
voidreadDirectedGraph();
MyGraph(intsize);
//构造函数中设置图的大小,分配空间
voidwriteGraph();
voidshortPath(intsource);
//求最短路径
protected:
private:
int**m_graph;
//用二维数组保存图
intm_size;
//图的大小
};
#endif
/////////////////////////////////////////////////////////////////////
MyGraph:
:
MyGraph(intsize)
inti,j;
m_size=size;
//给图分配空间
m_graph=newint*[m_size];
for(i=0;
i<
m_size;
i++)
{
m_graph[i]=newint[m_size];
}
for(j=0;
j<
j++)
{
m_graph[i][j]=INT_MAX;
}
}
三、实验代码
#include<
iostream>
#include<
iomanip>
stack>
deque>
fstream>
usingnamespacestd;
structprimnode
charbegvex;
charendvex;
intlowcost;
structadknode
intdist;
//最近距离
charway[50];
//顶点数组
intnodenum;
//经过的顶点数
classMgraph//邻接矩阵储存结构
Mgraph(){}
~Mgraph(){}
voidCreatMGraph();
voidDFS(int);
//用递归实现
voidDFS1(int);
//非递归
voidBFS(int);
voidprint();
voidprim();
intmini();
intlow();
//最短距离函数的辅助函数
intLocateVex(char);
voidkruskal();
voidDijkstra();
voidFloyd();
intnumber;
//顶点数目
intarcnum;
//边的数目
charvexs[50];
intarcs[50][50];
intvisited[50];
//便利时的辅助工具
primnodecloseedge[50];
//prim
adknodedist[50];
intD[20][20];
//floyd算法距离
intP[20][20][20];
//floyd算法路径
intMgraph:
LocateVex(chars)
for(inti=0;
number;
if(vexs[i]==s)
returni;
return-1;
voidMgraph:
print()
cout<
<
"
顶点为:
"
;
for(intk=0;
k<
k++)
vexs[k];
endl;
for(intj=0;
setw(6)<
left<
arcs[i][j]<
for(intm=0;
m<
m++)
visited[m];
CreatMGraph()//图的邻接矩阵储存结构
charvex1,vex2;
inti,j,k,m;
请输入定点数,边数:
cin>
>
number>
arcnum;
请输入顶点(字符串类型):
for(i=0;
vexs[i];
for(j=0;
arcs[i][j]=1000;
for(k=0;
请输入边的两个顶点及边的权值:
vex1>
vex2>
m;
i=LocateVex(vex1);
j=LocateVex(vex2);
arcs[i][j]=m;
arcs[j][i]=m;
DFS(inti=0)//用递归实现
intj;
vexs[i]<
------>
visited[i]=1;
for(j=0;
if(!
(arcs[i][j]==1000)&
&
!
visited[j])
DFS(j);
DFS1(inti=0)//非递归
stack<
int>
st;
st.push(i);
while(!
st.empty())
intj=st.top();
st.pop();
vexs[j]<
---->
visited[j]=1;
if((!
(arcs[j][k]==1000))&
visited[k])
st.push(k);
BFS(inti=0)//广度优先遍历
deque<
de;
de.push_back(i);
de.empty())
intk=de.front();
if(arcs[k][j]!
=1000&
de.push_back(j);
de.pop_front();
mini()
staticinti;
intmin=0;
for(intj=0;
if(closeedge[min].lowcost>
closeedge[j].lowcost)
min=j;
i=min;
包括边("
closeedge[i].begvex<
"
closeedge[i].endvex<
)"
prim()
charu;
请输入起始顶点:
u;
inti=LocateVex(u);
closeedge[j].begvex=u;
closeedge[j].endvex=vexs[j];
closeedge[j].lowcost=arcs[i][j];
for(intm=1;
intn=mini();
visited[n]=1;
closeedge[n].lowcost=1000;
for(intp=0;
p<
p++)
visited[p])
if(arcs[p][n]<
closeedge[p].lowcost)
closeedge[p].lowcost=arcs[p][n];
closeedge[p].begvex=vexs[n];
kruskal()
inta,b,k=0;
intmin=1000;
intarcs1[20][20];
for(intm=0;
visited[m]=m;
//每一个顶点属于一颗树
for(inti=0;
arcs1[i][j]=arcs[i][j];
while(k<
number-1)
min=1000;
if(arcs1[i][j]<
min)
a=i;
b=j;
min=arcs1[i][j];
if(visited[a]!
=visited[b])
vexs[a]<
vexs[b]<
k++;
for(intn=0;
n<
n++)
if(visited[n]==visited[b])
visited[n]=visited[a];
else
arcs1[a][b]=arcs[b][a]=1000;
Dijkstra()
请输入起始点"
dist[j].dist=arcs[i][j];
dist[j].nodenum=0;
for(j=1;
intdistance=1000;
visited[n])
if(distance>
dist[n].dist)
distance=dist[n].dist;
min=n;
intm=min;
visited[m]=1;
for(n=0;
if((dist[m].dist+arcs[m][n])<
dist[n].dist=dist[m].dist+arcs[m][n];
dist[n].nodenum=0;
for(intx=0;
x<
dist[m].nodenum;
x++)
dist[n].way[x]=dist[m].way[x];
dist[n].nodenum++;
dist[n].way[dist[n].nodenum++]=vexs[m];
}}}}
//输出功能
if(n!
=i)
{if(dist[n].dist<
1000)
到"
vexs[n]<
的最近距离为:
dist[n].dist<
经过的顶点为:
dist[n].nodenum;
{cout<
dist[n].way[p]<
----->
else
没有通路"
}}}
Floyd()
inti,j,m,n;
for(i=0;
for(j=0;
for(m=0;
P[i][j][m]=0;
D[i][j]=arcs[i][j];
if(D[i][j]<
P[i][j][i]=1;
P[i][j][j]=1;
}}
if(i==j||j==m||i==m)
continue;
if(D[i][m]+D[m][j]<
D[i][j])
D[i][j]=D[i][m]+D[m][j];
P[i][j][n]=P[i][m][n]||P[m][j][n];
if(D[i][j]<
D[i][j]<
if(P[i][j][m])
vexs[m]<
if(i!
=j)
}
intmain()
Mgraphg;
g.CreatMGraph();
g.Floyd();
return0;
}
四、实验结果
五、实验总结
本次实验主要是学习掌握图的存储结构,学会编写求最短路径的算法。
本次实验的算法虽有点复杂,但是多上机练习,完成本次实验也不是难事。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构实验报告 最短路径 数据结构 实验 报告 路径