数据结构之最短路径(Dijkstra 和 Floyed)
来源:互联网 发布:男士卡包 知乎 编辑:程序博客网 时间:2024/04/29 13:10
原理直接百度,这里只给出c++实现
#include <iostream>using namespace std;#define MAXVEX 6#define INF 10000void Dijkstra(int cost[][MAXVEX], int numsOfNode, int sourceNode);void Folyed( int cost[][MAXVEX], int numsOfNode);void main(){int cost[][MAXVEX]={{0,50,10,INF,INF,INF},{INF,0,15,50,10,INF},{20,INF,0,15,INF,INF},{INF,20,INF,0,35,INF},{INF,INF,INF,30,0,INF},{INF,INF,INF,3,INF,0}};//Dijkstra(cost,MAXVEX,1);//cout<<endl;/*//每队顶点之间的最短距离,调用MAXVEX次Dijkstrafor (int i = 0; i < MAXVEX ; i++ ){cout<<"The source is:"<<i<<endl;Dijkstra(cost,MAXVEX,i);cout<<endl;}*/Folyed(cost,MAXVEX);cout<<endl;}/*// Dijkstra是指单源最短路径,即固定一个顶点,求其分别到其他所有顶点的最短路径void Dijkstra(int cost[][MAXVEX], int numsOfNode, int sourceNode){int dist[MAXVEX]; //dist[]中存放源结点到其他结点的最短路径int path[MAXVEX];// path[]中存放最短路径的中当前结点的前一个结点,可以用来求解路径的长度int s[MAXVEX];//s[i]中存放0或1,0表示未找到源结点到节点Vi的最短路径,1表示已找到for (int i = 0; i < numsOfNode; i++){dist[i] = cost[sourceNode][i];s[i]=0;if ( cost[sourceNode][i] < INF )path[i] = sourceNode;elsepath[i] = -1;}s[sourceNode] = 1;//源结点的标号放入s中path[sourceNode] = 0;for ( int i = 0; i < numsOfNode; i++ ){int mindis = INF;int sign = -1;for ( int j =0; j < numsOfNode; j++ )//选出不在s中,且具有最小距离的顶点signif( s[j] == 0 && dist[j] < mindis ){sign = j;mindis = dist[j];}if( sign != -1){s[sign] = 1;//将sign加入到s中for( int j = 0; j < numsOfNode; j++ ) //修改不在s中结点的距离if( s[j] == 0)if( cost[sign][j] < INF && dist[sign] + cost[sign][j] < dist[j] ){dist[j] = dist[sign] + cost[sign][j];path[j] = sign;}}}//cout<<endl;//cout<<"The Dijkstra as follow:"<<endl;for ( int i = 0; i<numsOfNode; i++){if( i != sourceNode ){cout<<sourceNode<<"->"<<i<<":";if ( s[i] == 1){cout<<"The length of path is: "<<dist[i];int pre = i;cout<<" The Reverse Path is: ";while( pre != sourceNode ){cout<<pre<<",";pre = path[pre];}cout<<pre<<endl;}elsecout<<" The path is not exis!"<<endl;}}}*/void Folyed( int cost[][MAXVEX], int numsOfNode){int dist[MAXVEX][MAXVEX],path[MAXVEX][MAXVEX];for(int i = 0; i < MAXVEX; i++){for (int j = 0; j < MAXVEX; j++){dist[i][j] = cost[i][j];path[i][j] = -1;}}for (int k = 0; k < MAXVEX; k++){for(int i = 0; i < MAXVEX; i++){for (int j = 0; j < MAXVEX; j++){if ( dist[i][j] > dist[i][k] + dist[k][j]){dist[i][j] = dist[i][k] + dist[k][j];path[i][j] = k;}}}}cout<<endl;cout<< "The Folyed as follow:"<<endl;cout<<endl;for(int i = 0; i < MAXVEX; i++){for (int j = 0; j < MAXVEX; j++){if(i != j){cout<<i<<"->"<<j<<",";if (dist[i][j] == INF)cout<<"The path is not exis"<<endl;else{cout<<" The length of path is:"<<dist[i][j]<<", ";cout<<"The path is: "<<i<<",";int pre = path[i][j];while( pre != -1 ){cout<<pre<<",";pre = path[pre][j];}cout<<j<<endl;}}}cout<<endl;}}
运行结果:
Dijkstra:
Floyed:
0 0
- 数据结构之最短路径(Dijkstra 和 Floyed)
- 数据结构之最短路径(DijKstra)
- 最短路径 dijkstra bellford floyed
- 数据结构-图(三)-最短路径之Dijkstra
- 数据结构--最短路径(Dijkstra算法)
- 最短路径之Floyed算法
- 最短路径之Floyed-Warshall算法
- 最短路径(Dijikstra和Floyed)
- 图的最短路径Dijkstra+Floyed算法
- [图论] 最短路径(Bellman-Ford , SPFA , Floyed , Dijkstra)
- [图论] 最短路径(Bellman-Ford , SPFA , Floyed , Dijkstra)
- HDU 2112 HDU Today 【最短路径 dijkstra & floyed & SPFA 】
- 作业-最短路径问题(floyed.cpp dijkstra.cpp)
- 图论算法----最短路径Floyed算法和Dijkstra算法详解
- 【图】最短路径——Floyed算法和Dijkstra算法
- 【模板】最短路径(Floyed&SPFA )
- 最短路径(Dijkstra和Floyd)
- 数据结构之最短路径的 Dijkstra Algorithm && Floyd Algorithm
- Android关于gridview平滑滚动定位smoothScrollToPositionFromTop方法测试
- objc一个NetConnector类示例
- javaSE学习笔记之数据类型
- leetcode-10 Regular Expression Matching
- awk向脚本传递参数(二)
- 数据结构之最短路径(Dijkstra 和 Floyed)
- androidstudio导入eclipse源码和乱码问题
- 斯坦福大学iOS应用开发教程学习笔记
- 安卓杀死进程关闭程序
- LeetCode || 未完成的题目
- Pascal's Triangle II
- Android中控件spinner的使用
- 内存相关命令
- 读写kafka 0.7简单示例