最短路径-Floyd算法
2018-01-23 19:37
274 查看
#include <stdio.h> #define MAXSIZE 20 #define INITVALUE 65535 typedef struct { int vexs[MAXSIZE]; int arcs[MAXSIZE][MAXSIZE]; int vexNum, arcnum; }Graph; typedef int PathMin[MAXSIZE][MAXSIZE]; typedef int ShortPathTable[MAXSIZE][MAXSIZE]; void CreatGraph (Graph *G) { int i, j, m ,n, weight; printf("Enter vexNum & arcNum:"); scanf("%d%d", &(G->vexNum), &(G->arcnum)); for(i = 0; i < G->vexNum; i++) { printf("Enter %d vex:", i+1); scanf("%d", &(G->vexs[i])); for(j = 0; j < G->vexNum; j++) { G->arcs[i][j] = INITVALUE; } } for(i = 0; i < G->arcnum; i++) { printf("Enter %d arc:", i+1); scanf("%d%d%d", &m, &n, &weight); G->arcs[m] = weight; } } void PrintGraph (Graph *G) { int i, j; for(i = 0; i < G->vexNum; i++) { for(j = 0; j < G->vexNum; j++) { printf("%d ", G->arcs[i][j]); } printf("\n"); } } void ShortPathFloyd (Graph *G, PathMin P, ShortPathTable S) { int i, j, k; for(i = 0; i < G->vexNum; i++) { for(j = 0; j < G->vexNum; j++) { P[i][j] = j; S[i][j] = G->arcs[i][j]; } } for(k = 0; k < G->vexNum; k++) { for(i = 0; i < G->vexNum; i++) { for(j = 0; j < G->vexNum; j++) { if(S[i][j] > G->arcs[i][k]+G->arcs[k][j]) { S[i][j] = G->arcs[i][k]+G->arcs[k][j]; P[i][j] = P[i][k]; } } } } } void PrintFloyd (Graph *G, PathMin P, ShortPathTable S) { int i, j, k; printf("路径规划为:\n"); for(i = 0; i < G->vexNum; i++) { for(j = 0; j < G->vexNum; j++) { k = P[i][j]; printf("%d--", i); while(k != j) { printf("%d--", k); k = P[k][j]; } printf("%d\n", j); } } printf("各点的权值为:\n"); for(i = 0; i < G->vexNum; i++) { for(j = 0; j < G->vexNum; j++) { printf("%d ", S[i][j]); } printf("\n"); } } int main () { Graph G; PathMin P; ShortPathTable S; int i; CreatGraph(&G); PrintGraph(&G); ShortPathFloyd(&G, P, S); PrintFloyd(&G, P, S); return 0; }
相关文章推荐
- 最短路径—Dijkstra算法和Floyd算法
- 最短路径—Dijkstra算法和Floyd算法
- 最短路径—Dijkstra算法和Floyd算法
- Java数据结构----图--最短路径解法Dijkstra算法和Floyd算法
- 最短路径Dijkstar算法和Floyd算法详解(c语言版)
- 多源最短路径( Floyd算法)JAVA实现
- 运用Floyd算法求得带权有向图任意两点间的最短路径C/C++
- 每对顶点间最短路径----Floyd算法 收藏
- 最短路径—Dijkstra算法和Floyd算法
- Floyd算法求最短路径
- 最短路径—Dijkstra算法和Floyd算法
- C++编程练习(11)----“图的最短路径问题“(Dijkstra算法、Floyd算法)
- POJ--1502:MPI Maelstrom (最短路径:Dijkstra算法 & Floyd算法)
- 最短路径Dijkstra算法实现和Floyd算法实现
- hihoCoder 1089 : 最短路径·二:Floyd算法
- 最短路径—Dijkstra算法和Floyd算法
- 最短路径—Dijkstra算法和Floyd算法
- 6.3.3 最短路径算法--Dijkstra算法,Bellmanford算法,Floyd算法,Johnson算法
- ZOJ 3166题解 最短路径之Floyd算法
- 动态规划之所有点对的最短路径问题(Floyd算法)