寻找三角形
在無向圖中,如果三個不同的頂點之間都有邊,則稱他們組成了一個三角形。
在一張無向圖 G 中,有且僅有一個三角形。現在你的任務是找到它。
輸入格式
第一行兩個數 $n, m$,表示 G 的頂點個數和邊的條數。
接下來 $m$ 行,每行兩個數 $i, j$ 表示點 $i$ 和 $j$ 之間有一條邊。題目保證沒有重邊和自環。
輸出格式
輸出一行,三個整數, $i < j < k$ ,表示三角形的三個頂點。
數據范圍
對于 $20\%$的數據 $n < 200$。
對于另外 $30\%$ 的數據 $n \le 2000$。
對于全部數據 $n, m \le 100000$。
樣例輸入1
3 3 1 2 2 3 3 1樣例輸出1
1 2 3樣例輸入2
4 4 1 2 2 3 3 1 1 4樣例輸出2
1 2 3 #include<bits/stdc++.h> using namespace std; const int N=2010; int n,m,ans1,ans2,ans3,mp[N][N],u[N],v[N]; int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;++i){scanf("%d%d",&u[i],&v[i]);mp[u[i]][v[i]]=mp[v[i]][u[i]]=1;}bool flag=0;for(int i=1;i<=m;++i){int x=u[i],y=v[i];for(int j=1;j<=n;++j){if(j==x||j==y) continue;if(mp[x][j]&&mp[y][j]){ans1=x; ans2=y; ans3=j;flag=1; break;}}if(flag) break;}if(ans1>ans2) swap(ans1,ans2);if(ans1>ans3) swap(ans1,ans3);if(ans2>ans3) swap(ans2,ans3);printf("%d %d %d\n",ans1,ans2,ans3);return 0; }?
轉載于:https://www.cnblogs.com/huihao/p/8683418.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: vue better-scroll 使
- 下一篇: linux 6.4 multipath.