直接贴代码吧,简明易懂。

后面自己写了测试,输入数据为:

a
b
c
d
e
0 1 4
0 2 2
1 2 3
1 3 2
1 4 3
2 1 1
2 3 4
2 4 5
4 3 1

也就是课本上111的图4.9(上面为原图,下面为结果)

程序的输出结果为:

#include <iostream>
#include <string>
using namespace std; const int maxVertexNum = 20;
const int INF = 99999; typedef struct dGraph{
// vertexes
string vertex[maxVertexNum];
// edges
int edges[maxVertexNum][maxVertexNum];
int vertexNum;
int edgeNum;
// construct a graph
void set(int n, int e) {
vertexNum = n;
edgeNum = e;
//cout << "input vertex" << endl;
for (int i = 0; i < n; i++)
cin >> vertex[i];
for (int i = 0; i < n; i++)
for (int j = 0; j < n ; j++)
edges[i][j] = INF;
//cout << "input edge" << endl;
int weight;
for (int m = 0; m < e; m++) {
int i,j;
cin >> i >> j >> weight;
edges[i][j] = weight;
}
}
// Dijkstra's shortest-path alogorithm
void shortestPathDj(int v) {
bool visited[vertexNum] = {false};
int dist[vertexNum] = {INF};
string path[2 * vertexNum]; // initiation
for (int i = 0; i < vertexNum; i++) {
dist[i] = edges[v][i];
if (dist[i] < INF)
path[i] = vertex[v]+vertex[i];
else
path[i] = "";
}
dist[v] = 0;
visited[v] = 1;
//
int min;
int i, j, k;
for (j = 1; j < vertexNum; j++) {
min = INF;
// find shortest edge.
for (i = 0; i < vertexNum; i++) {
if (dist[i] < min && visited[i] == false) {
min = dist[i];
k = i;
}
}
visited[k] = true;
cout<<path[k]<<" "<<dist[k]<<endl;
for (i = 0; i < vertexNum; i++) {
if (dist[i] > dist[k] + edges[k][i] && visited[i] == false) {
dist[i] = dist[k] + edges[k][i];
path[i] = path[k] + vertex[i];
}
}
}
} } dGraph; int main() {
freopen("in.txt", "r", stdin);
dGraph G;
G.set(5,9);
G.shortestPathDj(0);
return 0;
}

  

最新文章

  1. js图片前端预览之 filereader 和 window.URL.createObjectURL
  2. Android基于mAppWidget实现手绘地图(十一)–移动地图到某个坐标
  3. JavaScript中,提取子字符串方法:Slice、Substring、Substr的比较。
  4. 寻找房间中心zz
  5. PowerDesigner反向工程,根据Oracle数据库结构生成ER图(2014-3-25记)
  6. SAP NWBC for HTML and Desktop configuration steps[From sdn]
  7. C#实现监控网络流量
  8. android 访问SMS短信收件箱
  9. How to: Reading an ini config file from a batch file
  10. 通过硬件层提高Android动画的性能
  11. android 热更新 tinker 从零开始到使用
  12. Apache配置虚拟主机后,不能访问localhost
  13. 浅谈Java SE、Java EE、Java ME三者的区别
  14. java并发编程基础 --- 7章节 java中的13个原子操作类
  15. CentOS7 安装极点五笔输入法
  16. TCP连接异常:broken pipe 和EOF
  17. 使用 GDebi 默认代替 Ubuntu 软件中心
  18. sublime text3:下载代码格式化插件和汉化插件
  19. android--------阿里 Sophix移动热修复
  20. vue使用nprogress页面加载进度条

热门文章

  1. idea 卡顿问题
  2. spring boot 事务
  3. Ubuntu系统修改服务器的静态ip地址
  4. c#ADSL拨号类
  5. 【转】pom.xml讲解
  6. RxJava四个基础接口
  7. js之深度克隆、简易克隆
  8. 深度探索C++对象模型——关于对象
  9. Windows计算机重置TCP / IP
  10. SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题