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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

一笔画问题 连通图(搜索+队列)

發布時間:2025/6/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一笔画问题 连通图(搜索+队列) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一筆畫問題

時間限制:3000?ms ?|? 內存限制:65535?KB 難度:4 描述

zyc從小就比較喜歡玩一些小游戲,其中就包括畫一筆畫,他想請你幫他寫一個程序,判斷一個圖是否能夠用一筆畫下來。

規定,所有的邊都只能畫一次,不能重復畫。

?

?

輸入
第一行只有一個正整數N(N<=10)表示測試數據的組數。
每組測試數據的第一行有兩個正整數P,Q(P<=1000,Q<=2000),分別表示這個畫中有多少個頂點和多少條連線。(點的編號從1到P)
隨后的Q行,每行有兩個正整數A,B(0<A,B<P),表示編號為A和B的兩點之間有連線。
輸出
如果存在符合條件的連線,則輸出"Yes",
如果不存在符合條件的連線,輸出"No"。
樣例輸入

2 4 3 1 2 1 3 1 4 4 5 1 2 2 3 1 3 1 4 3 4

樣例輸出

No Yes

?

數學家歐拉找到一筆畫的規律是:  ■⒈凡是由偶點組成的連通圖,一定可以一筆畫成。畫時可以把任一偶點為起點,最后一定能以這個點為終點畫完此圖。  ■⒉凡是只有兩個奇點的連通圖(其余都為偶點),一定可以一筆畫成。畫時必須把一個奇點為起點,另一個奇點終點。  ■⒊其他情況的圖都不能一筆畫出。(有偶數個奇點除以二便可算出此圖需幾筆畫成。)根據歐拉總結的規律,我們只需要1、判斷圖是否聯通2、判斷點是奇點的個數,就可以了。

[cpp]?view plaincopy
  • #include<stdio.h>??
  • #include<string.h>??
  • #include<queue>??
  • using?namespace?std;??
  • int?map[1005][1005],vis[1005];??
  • int?i,p,q,odd,cnt;??
  • void?bfs(int?n)??
  • {??
  • ?int?t,num;??
  • ?queue<int>s;??
  • ?s.push(1);?/*從1開始*/??
  • ?vis[1]=1;?/*標記已訪問該點*/??
  • ?while(!s.empty())?/*隊列非空*/??
  • ?{??
  • ??t=s.front();??
  • ??s.pop();??
  • ??cnt++;??
  • ??num=0;??
  • ?for(i=1;i<=n;i++)??
  • ?{??
  • ??if(map[t][i]!=0)?/*這兩點之間有連線*/??
  • ??{??
  • ??????if(vis[i]==0)?/*i點還未訪問*/??
  • ?????{??
  • ???????s.push(i);??
  • ???????vis[i]=1;??
  • ??????}??
  • ??????num++;??
  • ????}??
  • ??}??
  • ?if(num%2==1)??
  • ??odd++;??
  • ?}??
  • }??
  • int?main()??
  • {??
  • ?int?j,a,b,m;??
  • ?scanf("%d",&m);/*m組數據*/??
  • ?while(m--)??
  • ?{??
  • ??odd=cnt=0;??
  • ??memset(vis,0,sizeof(vis));?/*初始化都沒有訪問*/??
  • ??memset(map,0,sizeof(map));/*初始化都沒有連線*/??
  • ??scanf("%d%d",&p,&q);??
  • ??for(i=0;i<q;i++)??
  • ??{??
  • ???scanf("%d%d",&a,&b);??
  • ???map[a][b]=1;??
  • ???map[b][a]=1;?/*建立圖表*/??
  • ??}??
  • ??bfs(p);??
  • ???????if((p==cnt)&&((odd==0)||(odd==2)))??//圖連通且有兩個或沒有奇數點???
  • ??????????????printf("Yes\n");??
  • ????else??
  • ?????printf("No\n");??
  • ??}??
  • ?return?0;??
  • } ?
  • 總結

    以上是生活随笔為你收集整理的一笔画问题 连通图(搜索+队列)的全部內容,希望文章能夠幫你解決所遇到的問題。

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