無向圖的最小環問題
思路
這道題的
n
n
n的資料很小,
n
≤
100
n\le100
n≤100,所以我們就可以用
F
l
o
y
d
Floyd
Floyd演算法來解決。
我們演算法模板:
for(int k=1;k<=n;k++) {
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
if(f[i][j]>f[i][k]+f[k][j])
f[i][j]=f[i][k]+f[k][j];
}
}
}
每一次最外層迴圈,我們都求到了前
k
k
k的最短路。且這
k
−
1
k-1
k−1個點不包括點
k
k
k,並且他們的最短路徑中也不包括
k
k
k點。
我們就可以在這前
k
−
1
k-1
k−1個點中選二個點
i
,
j
i,j
i,j,因為
i
−
j
i-j
i−j已經是
(
i
,
j
)
(i,j)
(i,j)間的最短路徑,且這個路徑不包含
k
k
k點。(注意,這兒的
i
−
j
i-j
i−j可能不是
(
i
,
j
)
(i,j)
(i,j)之間的最短路,但絕對是不經過
k
k
k以上點的最短路。)
所以連線
i
−
j
−
k
−
i
i-j-k-i
i−j−k−i,我們就得到了一個經過
i
,
j
,
k
i,j,k
i,j,k的最小環。
最後每次更新
a
n
s
ans
ans的最小值即可。
程式碼
#include <bits/stdc++.h>
using namespace std;
const int INF=1e13;
int n,m;
long long a[105][105],f[105][105],ans=INF;
int main() {
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++)
a[i][j]=f[i][j]=INF;
a[i][i]=f[i][i]=0;
}
for(int i=1;i<=m;i++) {
long long u,v,w;
scanf("%lld %lld %lld",&u,&v,&w);
a[u][v]=f[u][v]=w,a[v][u]=f[v][u]=w;
}
for(int k=1;k<=n;k++) {
for(int i=1;i<n;i++) {
for(int j=i+1;j<k;j++)
if(f[i][j]+a[i][k]+a[k][j]<ans)
ans=f[i][j]+a[i][k]+a[k][j];
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
if(f[i][j]>f[i][k]+f[k][j])
f[i][j]=f[i][k]+f[k][j];
}
}
}
if(ans==INF) printf("No solution.");
else printf("%lld",ans);
return 0;
}
相關文章
- 無向圖的最小環問題[TODO]
- POJ 1734 Sightseeing trip Floyd求無向圖最小環
- 無向圖最小割問題取得新突破,谷歌研究獲SODA 2024最佳論文獎谷歌
- 拓撲排序 (BFS )DAG (有向無環圖)排序
- 圖-無向圖
- C++輸出有向無環圖的所有拓撲序列C++
- P1989 無向圖三元環計數
- 雙陣列Trie樹高效構建有向無環圖陣列
- [簡易版]有向無環圖(DAG)前端視覺化前端視覺化
- 如何在 Java 中實現無向環和有向環的檢測Java
- leetcode.最小棧問題LeetCode
- 用SQL解決有向圖問題(轉)SQL
- [Tricks-00006]CF1558E 如何處理無向圖中的任意環?tourist 題,太神啦。
- 二叉樹的最小深度問題二叉樹
- 陣列的最小不可組成和問題陣列
- 圖:310.最小高度數, 題解
- 線性最小二乘問題
- 樹上最小點覆蓋的一類問題
- 去除重複字母(不同字元的最小序列)問題字元
- 定時器(setTimeout/setInterval)最小延遲的問題定時器
- 問答題:物件導向的思想物件
- LeetCode 64號問題 最小路徑和LeetCode
- PicGo無法刪除雲端圖片問題PicGo
- 非線性最小二乘問題的求解方法
- 【PyCharm】解決虛擬環境pip無法使用問題PyCharm
- 【筆記/模板】無向圖的雙連通分量筆記
- 選擇問題(求第k個最小元素)
- 成功解決github無法顯示圖片問題Github
- 圖的最小生成樹
- 用PriorityQueue解決選擇最小的K個數問題
- 如何在 Java 中實現無向圖Java
- 記一次hadoop yarn環境無法提交任務的問題排查HadoopYarn
- 如何向大牛請教問題?
- 搭建TS環境遇到的問題
- 判斷一個有向圖是否有環
- 一個基於配置檔案構建有向無環圖,並多執行緒執行圖上節點的例子執行緒
- CSMA/CD 以太幀最小幀長計算問題
- 「典」P5540 最小乘積相關問題