ural 1004(floyd 求最小环)
来源:互联网 发布:jade软件使用 编辑:程序博客网 时间:2024/06/05 20:05
poj暂时出问题。。就先做一个这里的题了。。。。简单题。。。。求无向图的最小环。。。floyd算法。。。。
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int inf = 100000000;int maze[110][110], dis[110][110], path[110], pi;int pre[110][110];void get_path(int p1, int p2) { if (pre[p1][p2]) { get_path(p1, pre[p1][p2]); get_path(pre[p1][p2], p2); } else path[pi++] = p1;}inline bool check(int i, int j, int k) { if (i!=j && j!=k && k!=i) return 1; return 0;}int main() { int n, m, i, j, k, mi, u, v; while (scanf("%d", &n) && n > 0) { scanf("%d",&m); for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) maze[i][j] = dis[i][j] = inf, pre[i][j] = 0; for (i = 1; i <= m; i++) { scanf("%d%d%d", &u, &v, &k); if(k<maze[u][v]) maze[u][v] = maze[v][u] = dis[u][v] = dis[v][u] = k; } for (mi = inf, k = 1; k <= n; k++) { for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) if (check(i, j, k) && (dis[i][j] + maze[j][k] + maze[k][i] < mi)) { mi = dis[i][j] + maze[j][k] + maze[k][i]; pi = 0, get_path(i, j), path[pi++] = j, path[pi++] = k; } for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) if (check(i,j,k) && dis[i][k] + dis[k][j] < dis[i][j]) dis[i][j] = dis[i][k] + dis[k][j], pre[i][j] = k; } if (mi == inf) puts("No solution."); else { for (i = 0; i < pi - 1; i++) printf("%d ", path[i]); printf("%d\n", path[pi - 1]); } } return 0;}
- ural 1004(floyd 求最小环)
- Ural 1004 FLOYD最小环问题
- floyd求最小环
- floyd求最小环
- floyd求最小环
- floyd求最小环
- FLOYD 求最小环
- floyd求最小环
- floyd求最小环
- Floyd求最小环
- floyd求最小环
- floyd求最小环
- 求最小环(基于Floyd)
- poj1734Sightseeing trip(floyd求最小环)
- floyd算法求最小环
- Floyd算法求最小环
- floyd求最小环 模板
- hdu1599 floyd 求最小环
- 一道中兴试题的解析
- 类的访问权限和派生继承时的访问权限
- vi常用命令
- strcat()连接两个字符串的问题分析
- 用Jquery实现checkbox的反选、全选、全不选
- ural 1004(floyd 求最小环)
- USACO Section 1.2 Transformations
- javascript设置overflow-y
- Localization in XCode4
- 零值比较
- 感谢CSDN
- java线程的学习
- 类属类的界面与实现应该放在同一个文件模块中
- 20110918——light、dense、tense系列