当前位置:网站首页>AcWing 344. Solution to the problem of sightseeing tour (Floyd finding the minimum ring of undirected graph)
AcWing 344. Solution to the problem of sightseeing tour (Floyd finding the minimum ring of undirected graph)
2022-07-07 01:36:00 【Mr. Qiao Da】
AcWing 344. Sightseeing tour
Use this question floyd To find the minimum ring problem of undirected graphs , Pay attention to the sequence and significance of recording the path and finding the minimum intermediate point ( Because what is required is a ring , When you first find the ring , here k Not updated to i、j The shortest point between , So in path[cnt ++ ] = k And the next line get_min in path[cnt ++ ] = k Of k Values are different , It is guaranteed to be a ring )
#include<bits/stdc++.h>
using namespace std;
const int N = 110, INF = 0x3f3f3f3f;
int n, m;
int d[N][N], w[N][N]; //d Store the shortest path ,w Store edge weights
int path[N];
int pos[N][N];
int cnt;
void get_path(int i, int j){
if(pos[i][j] == 0) return ;
int k = pos[i][j];
get_path(i, k); // find i And the middle point k And save path Array
path[cnt ++ ] = k;
get_path(k, j); // find k and j And save path Array
}
signed main()
{
cin>>n>>m;
memset(w, 0x3f, sizeof w);
for(int i = 1; i <= n; i ++ ) w[i][i] = 0;
while(m -- ){
int a, b, c;
cin>>a>>b>>c;
w[a][b] = w[b][a] = min(w[a][b], c);
}
int res = INF;
memcpy(d, w, sizeof d);
for(int k = 1; k <= n; k ++ ){
// What is more puzzling here is why to seek the path first , Find the shortest distance between two points
// as a result of , here k Not updated to i、j The shortest point between
// So in path[cnt ++ ] = k And the next line get_min in path[cnt ++ ] = k Of k Values are different , It is guaranteed to be a ring
// Find the path first
for(int i = 1; i < k; i ++ ){
for(int j = i + 1; j < k; j ++ ){
if(res > (long long)d[i][j] + w[k][i] + w[j][k]){
// Find a smaller ring
res = d[i][j] + w[k][i] + w[j][k]; // Pay attention to the direction of the ring
cnt = 0; // Re record the path
path[cnt ++ ] = k; // This ring is from k set out
path[cnt ++ ] = i;
get_path(i, j);
path[cnt ++ ] = j;
}
}
}
// Find the middle point
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= n; j ++ ){
if(d[i][j] > d[i][k] + d[k][j]){
d[i][j] = d[i][k] + d[k][j];
pos[i][j] = k;
}
}
}
}
if(res == INF) cout<<"No solution."<<endl;
else{
for(int i = 0; i < cnt; i ++ ) cout<<path[i]<<' ';
cout<<endl;
}
return 0;
}
边栏推荐
- 7.6模拟赛总结
- Using the entry level of DVA in taro3.*
- DS-5/RVDS4.0变量初始化错误
- [advanced C language] 8 written questions of pointer
- Js逆向——捅了【马蜂窝】的ob混淆与加速乐
- AcWing 345. 牛站 题解(floyd的性质、倍增)
- 【C语言进阶篇】指针的8道笔试题
- ZOJ Problem Set – 2563 Long Dominoes 【如压力dp】
- Go zero micro service practical series (IX. ultimate optimization of seckill performance)
- Neon Optimization: performance optimization FAQ QA
猜你喜欢
随机推荐
Installation of gazebo & connection with ROS
Match VIM from zero (0) -- Introduction to vimscript
字节P7专业级讲解:接口测试常用工具及测试方法,福利文
AcWing 361. 观光奶牛 题解(spfa求正环)
json学习初体验–第三者jar包实现bean、List、map创json格式
C # method of calculating lunar calendar date 2022
Clickhouse fields are grouped and aggregated, and SQL is queried according to the granularity of any time period
Dark horse notes - create immutable sets and streams
分享一个通用的so动态库的编译方法
shell脚本快速统计项目代码行数
Body mass index program, entry to write dead applet project
Your cache folder contains root-owned files, due to a bug in npm ERR! previous versions of npm which
7.6 simulation summary
ZOJ Problem Set – 2563 Long Dominoes 【如压力dp】
2022 Google CTF SEGFAULT LABYRINTH wp
使用nodejs完成判断哪些项目打包+发版
增加 pdf 标题浮窗
Js逆向——捅了【马蜂窝】的ob混淆与加速乐
C语言实例_3
Long press the button to execute the function