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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

汉密尔顿回路

發(fā)布時間:2023/12/18 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汉密尔顿回路 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

著名的“漢密爾頓(Hamilton)回路問題”是要找一個能遍歷圖中所有頂點的簡單回路(即每個頂點只訪問 1 次)。本題就要求你判斷任一給定的回路是否漢密爾頓回路。

輸入格式:

首先第一行給出兩個正整數(shù):無向圖中頂點數(shù)?N(2<N≤200)和邊數(shù)?M。隨后?M?行,每行給出一條邊的兩個端點,格式為“頂點1 頂點2”,其中頂點從 1 到N?編號。再下一行給出一個正整數(shù)?K,是待檢驗的回路的條數(shù)。隨后?K?行,每行給出一條待檢回路,格式為:

n?V?1???V?2?????V?n??

其中?n?是回路中的頂點數(shù),V?i???是路徑上的頂點編號。

輸出格式:

對每條待檢回路,如果是漢密爾頓回路,就在一行中輸出"YES",否則輸出"NO"。

輸入樣例:

6 10 6 2 3 4 1 5 2 5 3 1 4 1 1 6 6 3 1 2 4 5 6 7 5 1 4 3 6 2 5 6 5 1 4 3 6 2 9 6 2 1 6 3 4 5 2 6 4 1 2 5 1 7 6 1 3 4 5 2 6 7 6 1 2 5 4 3 1

輸出樣例:

YES NO NO NO YES NO

?ac代碼

#include<iostream> using namespace std; int main() {int m,n;cin>>n>>m;int v1,v2,v;int mp[201][201]={0};for(int i=1;i<=n;i++){mp[i][i] = 1;}for(int i=1;i<=m;i++){cin>>v1>>v2;mp[v1][v2]=mp[v2][v1]=1;}int num,k,vis;cin>>m;for(int i=0;i<m;i++){cin>>k;int begin;cin>>begin;vis = begin;int flag = 1;int visited[210]={0};for(int j=1;j<k;j++){cin>>num;if(visited[num])flag = 0;if(mp[vis][num]==0)flag = 0;visited[num]=1;vis = num;}if(k!=n+1)flag = 0;if(vis != begin)flag = 0;if(flag) cout<<"YES"<<endl;else cout<<"NO"<<endl; }return 0; }

?

總結

以上是生活随笔為你收集整理的汉密尔顿回路的全部內容,希望文章能夠幫你解決所遇到的問題。

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