日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UVA-10054 The Necklace (欧拉回路)

發布時間:2025/6/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVA-10054 The Necklace (欧拉回路) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目大意:有n個珠子,珠子兩邊的顏色已知,問能否連成一條項鏈。(兩個珠子可以項鏈當且僅當一個珠子的一邊顏色與另一個珠子的另一邊顏色相同)。

題目分析:歐拉回路。將顏色視作節點,珠子當做邊,問題變成了找一條歐拉回路。

歐拉回路存在的條件:無向圖:1.圖連通;2.無奇點;  有向圖:1.忽略邊的方向后,圖連通;2.每個點的入度都等于出度;

注意:輸出回路的時候要逆序輸出。。。

?

代碼如下:

# include<iostream> # include<cstdio> # include<vector> # include<cstring> # include<algorithm> using namespace std;int n,du[55],v[55][1005],mp[55][55],vis[55];void dfs(int u) {for(int i=1;i<=v[u][0];++i){int k=v[u][i];if(!vis[k]){vis[k]=1;dfs(k);}} }bool judge() {memset(vis,0,sizeof(vis));int cnt=0;for(int i=1;i<=50;++i){if(du[i]==0)continue;if(!vis[i]){++cnt;if(cnt>1)return false;vis[i]=1;dfs(i);}}for(int i=1;i<=50;++i)if(du[i]&1)return false;return true; }void print(int u) {for(int i=1;i<=v[u][0];++i){int k=v[u][i];if(!mp[u][k])continue;--mp[u][k],--mp[k][u];print(k);printf("%d %d\n",k,u);///逆序輸出} }int main() {int T,a,b,cas=0;scanf("%d",&T);while(T--){memset(du,0,sizeof(du));memset(mp,0,sizeof(mp));scanf("%d",&n);for(int i=0;i<55;++i)v[i][0]=0;while(n--){scanf("%d%d",&a,&b);v[a][++v[a][0]]=b;v[b][++v[b][0]]=a;++du[a],++du[b];++mp[a][b],++mp[b][a];}printf("Case #%d\n",++cas);if(!judge())printf("some beads may be lost\n");else{for(int i=1;i<=50;++i){if(du[i]>0){print(i);break;}}}if(T)printf("\n");}return 0; }

  

轉載于:https://www.cnblogs.com/20143605--pcx/p/4892882.html

總結

以上是生活随笔為你收集整理的UVA-10054 The Necklace (欧拉回路)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。