一个dijkstra的简单算法
2010-11-23 22:48
281 查看
#include <cstdlib> #include <iostream> #define LENGTH 100 #define Maxint 1000000 using namespace std; int main(int argc, char *argv[]) { //图G的点数N和边数M int N,M,i,j; //边的起点和终点 int E[LENGTH][2]; //边的权值 int Value[LENGTH]; //分别是当前选边的权值‘选边的编号和树的长度 // int Min,MinE,ValueT; //读入图G,图G采用边目录表示法 cin>>N>>M; int c[LENGTH][LENGTH]; for( i = 0; i <= N; i++) for(j = 0; j <= N; j++) c[i][j] = Maxint; //初始化 for (i=0;i<M;i++) { cin>>E[i][0]>>E[i][1]>>Value[i]; c[E[i][0]][E[i][1]] = Value[i]; } // for( i = 0; i <= N; i++) // for(j = 0; j <= N; j++) // cout << c[i][j] << endl; int dist[LENGTH]; int prev[LENGTH]; bool s[Maxint]; int v = 1; for(i = 1; i <= N; i++) { dist[i] = c[v][i]; s[i] = false; if(dist[i] == Maxint) prev[i] = 0; else prev[i] = v; } dist[v] = 0; s[v] = true; for(i = 1; i < N; i++) { int temp = Maxint; int u = v; for(j = 1; j <= N; j++) if((!s[j])&&(dist[j] < temp)) {u = j; temp = dist[j];} s[u] = true; for(j = 1; j <= N; j++) if((!s[j]) && (c[u][j] < Maxint)) { int newdist = dist[u] + c[u][j]; if(newdist < dist[j]) { dist[j] = newdist; prev[j] = u; } } } cout << "The shortest path: " <<endl; for(i = 1; i <= N; i++) { if(i != 1) cout << "1 -> " << i <<": " << dist[i] << endl; } system("PAUSE"); return EXIT_SUCCESS; }
相关文章推荐
- Opnet 一个简单的网络实现Dijkstra最短路径算法,路径代价为跳数加排队延时
- 一个简单实用的遗传算法c程序(转载)
- 用Python函数实现求取一个正实数平方根的简单算法
- 改变距离定义情况下Dijkstra算法正确性成立的一个充分条件
- 一个简单的JavaScript 日期计算算法
- 在matlab基础上简单实现一个神经网络算法
- 一个简单的算法题
- 阶乘问题(大数阶乘)简单 n! (一个大数与一个小数相乘的算法 、一个大数与一个小数的除法算法 *【模板】 )
- 一天一个算法题-简单的-递归
- 一天一个算法题-简单的-递归-猴子吃桃问题
- 一个简单最大正向匹配(Maximum Matching)MM中文分词算法的实现
- 一个数独问题的算法(已更新,提供一个简单算法,欢迎拍砖)
- 一个简单的双色球算法
- LOJ2254 && bzoj5016 [Snoi2017]一个简单的询问 莫队算法
- 一个简单的算法题目,搞了半天,希望大家能给点意见
- 一个简单的随机数生成算法实现(C++)
- 简单算法--一个整形数逆序输出后正序输出/一段精彩的递归代码
- 一个简单的算法题
- 求一个向量的任何连续子向量的最大和的4种算法实现(简单实例)
- 【zz】一个简单的同步算法