数据结构-图-最短路径(2)弗洛伊德算法构造
来源:互联网 发布:qq for mac远程协助 编辑:程序博客网 时间:2024/06/07 02:57
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_FLOYD(UNDGraph G);
int Path[MAXNUM][MAXNUM];//记录上一顶点序号
int D[MAXNUM][MAXNUM];//记录vi与vj直接最短路径长度
int main(){
UNDGraph G;
cout << "---------创建邻接矩阵---------\n";
create_adjacency_matrix(G);
cout << "---------遍历邻接矩阵---------\n";
ergodic_adjacency_matrix(G);;
cout << "---------最短路径---------\n";
short_path_FLOYD(G);
for(int i = 0; i < G.vertex_num; i++) {
for(int j = 0; j < G.vertex_num; j++) {
if(i != j) {
cout << G.vertex[i] << "到" << G.vertex[j] << "最短路径为:" << D[i][j] << 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_FLOYD(UNDGraph G){
for(int i = 0; i < G.vertex_num; i++) {
for(int j = 0; j < G.vertex_num; j++) {
D[i][j] = G.adjacency_martrix[i][j];
if(D[i][j] < MAXVALUE && i != j) {
Path[i][j] = i;
}
else {
Path[i][j] = -1;
}
}
}
for(int k = 0; k < G.vertex_num; k++) {
for(int i = 0; i < G.vertex_num; i++) {
for(int j = 0; j < G.vertex_num; j++) {
if(D[i][k] + D[k][j] < D[i][j]) {
D[i][j] = D[i][k] + D[k][j];
Path[i][j] = Path[k][j];
}
}
}
}
}
2.结果区
阅读全文
0 0
- 数据结构-图-最短路径(2)弗洛伊德算法构造
- 图--最短路径--弗洛伊德算法
- 最短路径 [弗洛伊德算法] --->图
- 弗洛伊德最短路径算法
- 弗洛伊德算法--最短路径
- 最短路径-弗洛伊德算法
- 弗洛伊德最短路径算法
- 最短路径(弗洛伊德算法)
- 最短路径--弗洛伊德算法
- 最短路径:弗洛伊德算法
- 弗洛伊德最短路径算法
- 弗洛伊德最短路径算法
- 最短路径---弗洛伊德算法
- 最短路径(弗洛伊德算法)
- 数据结构_图_最短路径_弗洛伊德(Floyed)算法
- 数据结构-图-最短路径(1)迪杰斯特拉算法构造
- 弗洛伊德(Floyd)算法求解图的最短路径
- 图的最短路径弗洛伊德Floyd算法
- 理解RxJava(二)操作符流程原理分析
- 2017-12-03 Xilinx U471-IOB文档学习&总结(1):
- 团体程序设计天梯赛-练习集 L1-032. Left-pad
- VoLTE学习笔记(1)
- leetcode 树总结
- 数据结构-图-最短路径(2)弗洛伊德算法构造
- 表单脚本
- 1055. The World's Richest (25)
- git
- POJ2196 HDU1197 ZOJ2405 Specialized Four-Digit Numbers【进制+水题】
- Centos7.x 更改网卡名称eth0
- tornado异步
- 编译链接
- 基于高德SDK实现跑步时轨迹渐变功能