数据结构-图-最短路径(1)迪杰斯特拉算法构造
来源:互联网 发布:剑灵刺客捏脸数据图 编辑:程序博客网 时间:2024/06/06 00:25
1.代码区
/*
*Date: 17-12-03
*Author: Qian_Yu
*Program: 迪杰斯特拉算法求最短路径
*/
#include <bits/stdc++.h>
#define MAXVALUE 0x7FFF
#define MAXNUM 0x64
using namespace std;
typedef struct adj_node{
char vertex[MAXNUM];
int adjacency_martrix[MAXNUM][MAXNUM];
int vertex_num,edge_num;
} UNDGraph;
void create_adjacency_matrix(UNDGraph &G);
int get_subscript(UNDGraph G,char v);
void ergodic_adjacency_matrix(UNDGraph G);
void short_path_DIJ(UNDGraph G,int v0);
bool S[MAXNUM];//记录v0到vi是否已被确定为最短路径,true/false
int Path[MAXNUM];//记录v0是否可以到vi
int D[MAXNUM];//记录最短路径
int main(){
UNDGraph G;
cout << "---------创建邻接矩阵---------\n";
create_adjacency_matrix(G);
cout << "---------遍历邻接矩阵---------\n";
ergodic_adjacency_matrix(G);;
cout << "---------最短路径---------\n";
char v0;
cout << "请输入顶点数组中的任意一个顶点:";
cin >> v0;
short_path_DIJ(G,get_subscript(G,v0));
for(int i = 0; i < G.vertex_num; i++) {
if(v0 != G.vertex[i]) {
cout << v0 << "到" << G.vertex[i] << "的最短路径为:" << D[i] << endl;
}
}
return 0;
}
void create_adjacency_matrix(UNDGraph &G){
cout << "请输入顶点数(int),边数(int):";
cin >> G.vertex_num >> G.edge_num;
cout << "请输入顶点信息(char):";
for(int i = 0;i < G.vertex_num;i++) {
cin >> G.vertex[i];
}
for(int i = 0;i < G.vertex_num;i++) {
for(int j = 0;j < G.vertex_num;j++) {
G.adjacency_martrix[i][j] = MAXVALUE;
}
}
char v1,v2;
int w;
cout << "请输入顶点对V1(char),V2(char):\n";
for(int k = 0;k < G.edge_num;k++) {
cin >> v1 >> v2 >> w;
int i = get_subscript(G,v1);
int j = get_subscript(G,v2);
G.adjacency_martrix[i][j] = w;
}
}
int get_subscript(UNDGraph G,char v){
for(int i = 0;i < G.vertex_num;i++) {
if(G.vertex[i] == v) {
return i;
}
}
return -1;
}
void ergodic_adjacency_matrix(UNDGraph G){
for(int i = 0;i < G.vertex_num;i++) {
for(int j = 0;j < G.vertex_num;j++) {
printf(j == 0?"%d":"\t%d",G.adjacency_martrix[i][j]);
}
cout << endl;
}
}
void short_path_DIJ(UNDGraph G,int v0){
int n = G.vertex_num;
for(int v = 0;v < n;v++) {
S[v] = false;
D[v] = G.adjacency_martrix[v0][v];
if(D[v] < MAXVALUE) {
Path[v] = v0;
}
else {
Path[v] = -1;
}
}
S[v0] = true;
D[v0] = 0;
int v;
for(int i = 1;i < n;i++) {
int min = MAXVALUE;
for(int w = 0;w < n;w++) {
if(!S[w] && D[w] < min) {
v = w;
min = D[w];
}
}
S[v] = true;
for(int w = 0;w < n;w++) {
if(!S[w] && (D[v] + G.adjacency_martrix[v][w]) < D[w]) {
D[w] = D[v] + G.adjacency_martrix[v][w];
Path[w] = v;
}
}
}
}
2.结果区
阅读全文
0 0
- 数据结构-图-最短路径(1)迪杰斯特拉算法构造
- 数据结构-图-最短路径(2)弗洛伊德算法构造
- 数据结构_7:图算法 :最短路径
- 【数据结构】最短路径算法
- 数据结构与算法之最短路径--迪杰斯特拉算法
- 数据结构 图 最短路径
- 数据结构 最短路径之—迪杰斯特拉算法
- 【数据结构与算法】图之最短路径
- 数据结构-Astar算法-最短路径
- 数据结构--最短路径(Dijkstra算法)
- 数据结构之最短路径Dijkdtra算法
- 数据结构 最短路径问题 Floyd算法
- 图--最短路径--迪杰斯特拉算法
- 【图】最短路径--迪杰斯特拉(Dijkdtra)算法
- 迪杰斯特拉算法--最短路径
- 迪杰斯特拉算法-最短路径
- 最短路径-迪杰斯特拉算法
- 最短路径(迪杰斯特拉算法)
- 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水。
- spring常见面试题
- Android的设计模式-备忘录模式
- python学习—Day35-1—匿名函数、内建函数
- camera 拍照流程
- 数据结构-图-最短路径(1)迪杰斯特拉算法构造
- samba共享
- 【安全牛学习笔记】ACUNETIX WEB VULNERABILITY SCANNER
- 文章内容过长显示省略号
- C语言str系列函数
- 机器学习(7)-EM算法
- github每次push代码时都要输入用户名和密码的解决方法
- “戏”说Spark-Spark核心-RDD转换操作算子详解(一)
- 新手linux常用命令转载