有向图的传递闭包,两点间最短路径的Floyd算法的变化.
2010-05-20 11:33
791 查看
#include <stdlib.h> #include <stdio.h> #define No -1 struct Graph { int **edge; int numV; }; void Floyd_Warshall(Graph &g,bool **t) { for(int i=0;i<g.numV;++i) { for(int j=0;j<g.numV;++j) { if(g.edge[i][j]!=No) { t[i][j]=true; } else { t[i][j]=false; } } } for(int k=0;k<g.numV;++k) { for(int m=0;m<g.numV;++m) { for(int n=0;n<g.numV;++n) { t[m] =(t[m][k]&&t[k] )||t[m] ; } } } } int main() { Graph g; scanf("%d",&g.numV); bool **t; t=(bool**)malloc(sizeof(bool*)*g.numV); g.edge=(int**)malloc(sizeof(int*)*g.numV); for(int i=0;i<g.numV;++i) { t[i]=(bool*)malloc(sizeof(bool)*g.numV); g.edge[i]=(int*)malloc(sizeof(int)*g.numV); for(int j=0;j<g.numV;++j) { printf("%d,%d的dist:",i,j); scanf("%d",&g.edge[i][j]); } } Floyd_Warshall(g,t); for(int m=0;m<g.numV;++m) { for(int n=0;n<g.numV;++n) { if(t[m] ==true) { printf("%d,%d,可以连通!/n",m,n); } } } return 0; }
每次加入一个新的中间点,判断能否连通.
相关文章推荐
- floyd算法(求任意两点间的最短路径)
- Floyd算法(任意两点间的最短路径)
- Dijkstra [迪杰斯特拉]算法思路(求单点到其他每个点的各个最短路径)Floyd算法:任意两点间最短距离
- warshall-floyd算法:POJ No 2139 Six Degress of Cowvin Bacon(任意两点最短路径))
- POJ 2139-- 最短路径 (floyd算法,任意两点间的最短路径)
- 运用Floyd算法求得带权有向图任意两点间的最短路径C/C++
- 拓扑排序、Dijkstra、Prim/Kruskal、全部最短路径/传递闭包
- 任意两点最短路 Floyd-Warshall算法 传递闭包
- #1089 : 最短路径·二:Floyd算法
- 最短路径—Dijkstra算法和Floyd算法
- 最短路径—Dijkstra算法和Floyd算法
- 最短路径—Dijkstra算法和Floyd算法
- 图的最短路径:Dijkstra、Bellman-Ford、Floyd算法
- hihoCoder#1089 最短路径·二:Floyd算法
- 最短路径—Dijkstra算法和Floyd算法
- Poj 1125 (Floyd算法求最短路径)
- POJ 1125 Stockbroker Grapevine(最短路径Floyd算法)
- 最短路径Floyd算法分析 收藏 Floyd最短路径算法
- 最短路径—Dijkstra算法和Floyd算法
- Floyd算法--多源最短路径