#ifndef GUIDE_H_INCLUDED
#define GUIDE_H_INCLUDED
#define MX 1000 //最大值 无穷
#define NUM 17 //最大顶点个数
typedef int adjmatrix[NUM][NUM];
typedef int path[NUM][NUM][NUM];
const int vexs[NUM] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
int arcs[NUM][NUM] = {
{0 ,20,MX,MX,20,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX},
{20,0 ,30,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX},
{MX,30,0 ,20,MX,30,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX},
{MX,MX,20,0 ,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX},
{20,MX,MX,MX,0 ,10,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX},
{MX,MX,30,MX,10,0 ,20,50,MX,MX,MX,MX,MX,MX,MX,MX,MX},
{MX,MX,MX,MX,MX,20,0 ,40,10,MX,MX,MX,MX,MX,MX,MX,MX},
{MX,MX,MX,MX,MX,50,40,0 ,MX,20,20,MX,MX,MX,MX,MX,MX},
{MX,MX,MX,MX,MX,MX,10,MX,0 ,20,MX,MX,MX,30,MX,MX,MX},
{MX,MX,MX,MX,MX,MX,MX,20,20,0 ,20,MX,MX,MX,MX,MX,MX},
{MX,MX,MX,MX,MX,MX,MX,20,MX,20,0 ,20,MX,MX,MX,MX,MX},
{MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,20,0 ,10,MX,MX,MX,MX},
{MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,10,0 ,MX,MX,20,MX},
{MX,MX,MX,MX,MX,MX,MX,MX,30,MX,MX,MX,MX,0 ,20,MX,MX},
{MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,20,0 ,20,MX},
{MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,20,MX,20,0 ,40},
{MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,40,0 }
};
#endif
#include <iostream>
using namespace std;
#include "guide.h"
//=====================================================
void Floeyd( adjmatrix G, adjmatrix D, path P )
{//利用弗洛伊德算法求图GA中每对顶点间的最短长度,对应存于二维数组A中
for(int v=0; v<NUM; v++)
for(int w=0; w<NUM; w++){
D[v][w]=G[v][w];
for( int u=0; u<NUM; ++u) P[v][w][u]=0; //0表示FALSE
if(D[v][w]<MX){
P[v][w][v]=1; P[v][w][w]=1; //1表示TRUE
}
}
for(int u=0; u<NUM; u++)
for(int v=0; v<NUM; v++)
for(int w=0; w<NUM; w++)
if( D[v][u]+D[u][w]<D[v][w]) {
D[v][w] =D[v][u]+D[u][w];
for( int i=0; i<NUM; ++i)
P[v][w][i]=P[v][u][i];
}
}
//=====================================================
void guide( adjmatrix GA, int a, int b ,int judge) //judge判断,1则为start < end,0则为start > end
{
adjmatrix D; //D[i,j]表示从i到j的最短距离;
path P; //P[i,j]表示从i到j的最短路径上j的父节点
Floeyd( GA, D, P );
cout << D[a][b] << endl;
cout << "路径为:";
if( judge==1 )
{
for(int u=a;u<b;u++)
{
if(P[a][b][u] == 1){
cout << u+1 << "->";
a=u;
}
}
cout << b+1 << endl;
}
else if( judge==0 )
{
int i=0;
int t[NUM]={0};
for(int u=a;u<b+1;u++)
{
if(P[a][b][u] == 1){
t[++i]=u+1;
a=u;
}
}
for(; i>1; i--)
{
cout << t[i] << "->";
}
cout << t[1] << endl;
}
}
void ShortestPath()
{
int start = 5;
int end = 5;
cout << "输入出发点和目的地编号 (1~17 空格分隔)" << endl;
cin >> start >> end;
if(start>0 && start<18 && end>0 && end<18)
{
cout <<"从"<< start;
cout << "到" << end ;
cout << "的最短路径长度 :" ;
if(start<=end)
guide( arcs, start-1, end-1 ,1);
else
guide( arcs, end-1, start-1 ,0);
}
else
cout << "没有这个地方!" << endl;
}
//============== mian文件 =============
int main()
{
char choose=0;
cout << "************************" << endl;
cout << " a.x到y的最短路径 " << endl;
cout << " b.退出 " << endl;
cout << " 版本号v1.8 " << endl;
cout << "************************" << endl;
cin >> choose;
while( choose!='b' )
{
if( choose=='a' )
{
ShortestPath();
cout << "===========================" << endl;
cout << " a.x到y的最短路径 b.退出 " << endl;
cout << "===========================" << endl;
}
else if(choose!='a'||choose!='b') cout << "输入错误,请重新输入:";
cin >> choose;
}
return 0;
}
分享到:
相关推荐
此代码描述是描述两点之间的最短路径的算法,对于我们求解最短距离很有帮助
数据结构中的关键路径实现,可视化界面,迪杰斯特拉算法,和弗洛伊德算法
本代码是数据结构(c语言)中图的弗洛伊德算法的实现
利用弗洛伊德算法计算给定有向网中两点最短距离;给出有向网中所要求点的信息,内有完整实验报告和代码详解
数据库的经典算法实现,整合,完全都是C语言版
使用弗洛伊德算法实现对北京所有地铁线任意两站之间票价的计算,涉及到最短路径问题。
迪杰斯特拉算法为最短路径搜索经典算法,在图论算法中较为重要。虽然现在路由采用的不是它,但都是由该算法和弗洛伊德算法演变而来,且行且学习,就从它开始吧!
C语言+弗洛伊德算法+最短路径优先算法实现校园导游咨询 本系统采用Dev C++开发平台来进行编写和测试,用到了类、数组、函数,指针、文件的读取存储操作以及DFS算法和所有顶点对的最短路径(Floyd算法)、 图的各种...
C语言实现的功能,金品源码
弗洛伊德算法(Floyd)算法的C语言实现VS2015工程
最短路径的典型用法,迪杰斯特拉和弗洛伊德两种算法的应用
C实用代码
数据结构课程设计 航班信息查询系统设计 C语言实现 创建图的存储结构使用邻接矩阵 最短路径使用迪杰斯特拉算法实现 弗洛伊德算法 交通咨询系统,能让旅客咨询从任一城市到另一城市之间的最短路径(里程)或最低花费...
代码的功能:用弗洛伊德算法求每一对顶点之间的最短路径的c语言实现。弗洛伊德算法采用图的带权邻接矩阵存储结构。算法基本思想:假设求顶点Vi到Vj的最短路径。弗洛伊德算法依次找从Vi到Vj,中间经过结点序号不大于0...
四54_赫夫曼编码C语言实现. mp4口55_图. mp4 逾56_图的定义与术语2. mp457_图的存储结构. mp4 58_图的存储结构(邻接表) . mp4 59_图的存储结构(十字链表、邻接多重表、边集数组) . mp4四93堆排序的代码实现...
1. 从学校园中选取10个景点 2. 分别对这10个景点特征进行说明 3. 以这10个景点作为10个顶点建立无向图 4. 对各个路径长度进行赋值 5. 根据建立的无向图创建一个领...6. 利用弗洛伊德算法实现两个景点间最短路径的求解
7.5.2 弗洛伊德算法 204 7.6 拓扑排序 207 7.6.1 AOV 网 207 7.6.2 拓扑排序核心算法 207 7.6.3 例题选讲 209 7.7 关键路径 209 7.7.1 AOE 网 209 7.7.2 关键路径核心算法 210 ▲真题仿造 213 真题仿造答案与解析 ...