博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Poj1734题解
阅读量:5346 次
发布时间:2019-06-15

本文共 2282 字,大约阅读时间需要 7 分钟。

  • 题目大意

    求一个无向图的最小环

  • 题解

    假设是有向图的话。仅仅须要令f[i][i]=+,再floyd就可以;
    对无向图。应该在floyd算法循环至k的一開始进行例如以下操作:
    枚举i和j,假设点i存在经过点j的环,则用ikkjjki 的最短路去更新最小环的长度,
    ans=min{
    ans,map[i][k]+map[k][j]+f[i][j]}
    然后更新最小环。
    这个工作进行完之后。才干够用floyd计算ikj的最短路。

  • Code

#include 
#include
#include
using namespace std;const int oo = 1000000000;int n, m, map[110][110], pre[110][110], f[110][110];int ans, path[110], top;void init(){ int x, y, z; scanf("%d%d", &n, &m); memset(f, -1, sizeof(f)); memset(map, -1, sizeof(map)); memset(pre, -1, sizeof(pre)); for(int i = 1; i <= m; ++i) { scanf("%d%d%d", &x, &y, &z); if(f[x][y] == -1) { f[x][y] = f[y][x] = map[x][y] = map[y][x] = z; } else { f[x][y] = f[y][x] = map[x][y] = map[y][x] = min(map[x][y], z); } pre[x][y] = x; pre[y][x] = y; } for(int i = 1; i <= n; ++i) { f[i][i] = map[i][i] = 0; } ans = oo;}void work(){ for(int k = 1; k <= n; ++k) { for(int i = 1; i < k; ++i) { for(int j = i + 1; j < k; ++j) { if(map[i][k] != -1 && map[k][j] != -1 && f[i][j] != -1 && ans > f[i][j] + map[i][k] + map[k][j]) { ans = f[i][j] + map[i][k] + map[k][j]; int t = j; top = 0; while(t != i) { path[++top] = t; t = pre[i][t]; } path[++top] = i; path[++top] = k; } } } //以上为找最小环 //下面为floyd更新最短路 for(int i = 1; i <= n; ++i) { for(int j = 1; j <= n; ++j) { if(f[i][k] != -1 && f[k][j] != -1 && (f[i][j] == -1 || f[i][j] > f[i][k] + f[k][j])) { f[i][j] = f[i][k] + f[k][j]; pre[i][j] = pre[k][j]; } } } } if(ans == oo) { puts("No solution."); return; } for(int i = 1; i <= top; ++i) printf("%d ", path[i]);}int main(){ init(); work(); return 0;}

转载于:https://www.cnblogs.com/jzssuanfa/p/7039679.html

你可能感兴趣的文章
DataTable添加行和列
查看>>
解决问题:怎样在页面获取数组和List集合的长度
查看>>
简述基于CPU的机器码运行过程
查看>>
uoj228:基础数据结构练习题
查看>>
检测数据库性能的方法
查看>>
mysql字符编码的设置以及mysql中文乱码的解决方法
查看>>
《iPhone高级编程—使用Mono Touch和.NET/C#》
查看>>
centos6 编译安装python3.7.4
查看>>
ansible自动化运维工具
查看>>
Python String模块用法
查看>>
一窥--顺序表和单链表
查看>>
PHP过滤各种html标签
查看>>
守护进程-互斥锁-IPC
查看>>
lnmp 搭建 初试
查看>>
单臂路由
查看>>
css遮罩层
查看>>
shell语法 04-Linux文本处理-sed
查看>>
力扣——快乐数
查看>>
设置代理
查看>>
错误变惊喜,10个有趣的404页面设计(转)
查看>>