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