• 大小: 3KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: C/C++
  • 标签: 最短路径  

资源简介

用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

评论

共有 条评论