资源简介
用c实现了求最短路径情况,可根据需要自己适当修改程序,就可以用于求最小花费,最短时间等。
代码片段和文件信息
/*输入数据注意事项:
1,不要重复输入相同结点之间但是不同的权重值。
2,权重值不要设为0
3,结点数不要小于4
//注意,程序求最短路径的算法来自书本上的P181迪杰斯特拉算法
*/
#include
#include
#include
#define Max 8//改变一下这个值就可以
#define MAXINIT 1000000//这代表一个足够大的数,也可以成其他更大的数,不要超过32位系统的整型最大数即可
enum boolean{FALSETRUE};
//首先定义一个图的邻接矩阵储存结构的类型
typedef struct{
int vexs[Max];//顶点数组,
int arcs[Max][Max];//邻接矩阵
int vexnumarcnum;//顶点数,边数
}AdjMatrix;
//下面是实现求最短路径的函数
// s[Max];标记那些已经找到最短路径的顶点集合,若s[i]=1则表示已经找到源点到v[i]的最短路径,若s[i]=0则表示尚未找到
//Dist[Max]用于记录源点到其他顶点的当前的最短距离即路径长度
//Path[Max]表示源点到v[i]的最短路径的前驱顶点,若没有路径,则Path[i]=-1,
//path[v]表示从v0到v的最短路径上v的前驱顶点
void Dijkstra(AdjMatrix gint v0int path[]int dist[])//vo是源点
{
/*求有向图g的从源点到其他顶点的最短路径*/
int s[Max]viw1jmin;
for(v=0;v {s[v]=0;
dist[v]=g.arcs[v0][v];
if(dist[v] path[v]=v0;
else
path[v]=-1;
}
dist[v0]=0;s[v0]=1;//最开始时,s中只有v0这一个顶点
/*循环求v0到某个顶点v的最短路径,并将v加入s集*/
for(i=0;i {min=MAXINIT;
v=-1;//记录找到的最小距离的定点序号
for(w1=0;w1 if(!s[w1]&&dist[w1] {v=w1;
min=dist[w1];
}
if(v!=-1)
{
s[v]=1;//将顶点v并入s中
for (j=0;j
- 上一篇:山东大学历年C语言题库.
- 下一篇:八皇后问题课程设计C++版
相关资源
- Dijkstra的三个
- Dijkstra最短路径算法C语言实现
- c++求图的最短路径算法
- 基于遗传算法的最短路径选择问题
- 复杂网络聚类系数最短路径平均长度
- Dijkstra algorithm c++ 实现版 最短路径算
- C++迷宫问题 寻找最短路径
- 迪杰斯特拉算法(Dijkstra)
- 北京地铁最短路径.rar
- 城市最短路径查询C语言
- 动态规划最短路径.cpp
- Floyd算法C++
- 狄杰斯卡尔算法最短路径算法实现
- A*最短路径算法 最短路径
- MFC实现的全国各个城市的最短路径查
- Floyd算法求任意两点间的最短路径
- 基于遗传算法的最短路径的程序的开
- 哈夫曼最小生成树及最短路径代码
- 用C语言写的简洁的Dijkstra最短路径算
- C语言实现F算法 最短路径算法
- D算法的C++实现
- 求解迷宫最短路径算法
- C语言数据结构用队列求解迷宫最短路
- 公交线路最短路径查询
- c语言实现的动态规划求最短路径长度
- 最短路径算法导航
- Dijkstra-欧洲旅行
- djksrla最短路径算法C++实现
- 动态规划算法实现多段图最短路径问
- 算法分析中单源最短路径问题的C++代
评论
共有 条评论