Dijkstra C++实现
来源:互联网 发布:中国各省贸易数据库 编辑:程序博客网 时间:2024/05/17 09:30
本文给出一个Dijkstra 算法的实现。。。
#include <iostream>#include <list>#include <vector>using namespace std;class Edge{public: int dst; int len; Edge(int d, int l) :dst(d), len(l){};};//图上的一个顶点class TableEntry{public: list<Edge> edges; //以顶点为起点的边 bool known; int dist; //最短路径的长度 int path; //最短路径的上一个顶点};typedef vector<TableEntry> Table;class Dijkstra{public: void IntializeTable(Table & T, int start) { ReadGraph(T); for (int i = 0; i < T.size(); i++) { T[i].known = false; T[i].dist = -1; T[i].path = -1; } T[start].dist = 0; } void Run(Table & T) { while (true) { int v = GetMinPos(T); if (v < 0) break; T[v].known = true; list<Edge>::iterator it; for (it = T[v].edges.begin(); it != T[v].edges.end(); it++) { int w = it->dst; if (T[w].dist < 0 || T[w].dist > T[v].dist + it->len) { T[w].dist = T[v].dist + it->len; T[w].path = v; } } } } void PrintPath(Table & T, int v) { if (T[v].path >= 0) { PrintPath(T, T[v].path); cout << "->"; } cout << v; }private: // 读取图上的边,这个大家随意发挥 void ReadGraph(Table & T) { T[0].edges.push_back(Edge(1, 7)); //... } int GetMinPos(Table & T) { int ret = -1; for (int i = 0; i < T.size(); i++) { if (false == T[i].known) { if (ret < 0) { ret = i; } else if (T[i].dist > 0 && T[i].dist < T[ret].dist) { ret = i; } } } return ret; }};int main(){ Table T(6, TableEntry()); Dijkstra dijkstra = Dijkstra(); dijkstra.IntializeTable(T, 0); dijkstra.Run(T); dijkstra.PrintPath(T, 5); system("PAUSE"); return 0;}
0 0
- C++Dijkstra算法实现
- Dijkstra算法 c语言实现
- Dijkstra算法 c/c++实现
- dijkstra算法C语言实现
- C++Dijkstra邻接表实现
- c/c++ Dijkstra算法实现
- 数据结构:Dijkstra算法实现 c实现
- dijkstra最短路径算法C实现
- 最短路径Dijkstra c实现
- Dijkstra(迪杰斯特拉)算法分析与实现(C++)
- C语言实现dijkstra(adjacence matrix)
- Dijkstra 算法的 C/C++ 实现
- Dijkstra 算法 c语言原生实现
- Dijkstra算法的简单实现(C++)
- Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- 配合Dijkstra算法的Hash表实现文件C语言
- 配合Dijkstra算法的二叉堆实现文件C语言
- Dijkstra 算法+Heap堆的完整c实现源码
- 俄罗斯方块
- OpenGL 的渲染流水线
- const 修饰函数参数,返回值,函数体
- Java工程配置文件的管理
- 如何将一个HTML页面嵌套在另一个页面中
- Dijkstra C++实现
- 双目视觉【1】
- JavaScript--第一天,基础语法
- java学习线路
- Learning 201702
- Error: Running Homebrew as root is extremely dangerous and no longer supported.
- Unity预计算全局光照的学习(速度优化,LightProbe,LPPV)
- Maven搭建SpringMVC+Mybatis项目详解
- mapreduce数据处理完整流程