NYOJ-42 一笔画问题
?
一筆畫問題
時間限制:3000 ms ?|? 內存限制:65535 KB 難度:4 描述zyc從小就比較喜歡玩一些小游戲,其中就包括畫一筆畫,他想請你幫他寫一個程序,判斷一個圖是否能夠用一筆畫下來。
規(guī)定,所有的邊都只能畫一次,不能重復畫。
?
輸入每組測試數(shù)據(jù)的第一行有兩個正整數(shù)P,Q(P<=1000,Q<=2000),分別表示這個畫中有多少個頂點和多少條連線。(點的編號從1到P)
隨后的Q行,每行有兩個正整數(shù)A,B(0<A,B<P),表示編號為A和B的兩點之間有連線。
如果不存在符合條件的連線,輸出"No"。
#include<stdio.h>
#include<string.h>
int p[1005],visit[1005],G[1005][1005];
int point,line;
void DFS(int i)
{
?int v=i;
?visit[i]=1;
?for(v=0;v<point;++v)
?{
??if(v!=i&&G[i][v]&&!visit[v])
???DFS(v);
?}
}
int main()
{
?int n,i,x,y,count,flag;
?scanf("%d",&n);
?while(n--)
?{
??count=0;
??flag=1;
??scanf("%d%d",&point,&line);
??memset(p,0,sizeof(p));//統(tǒng)計各節(jié)點的度
??memset(visit,0,sizeof(visit));//訪問標記數(shù)組
??memset(G,0,sizeof(G));//鄰接矩陣?
??for(i=0;i<line;++i)
??{
???scanf("%d%d",&x,&y);
???G[x-1][y-1]=G[y-1][x-1]=1;
???++p[x-1];
???++p[y-1];
??}
??DFS(0);//判斷是否連通
??for(i=0;i<point;++i)
??{
???G[i][i]=1;
???if(visit[i]==0)
????flag=0;
???if(p[i]&1)
????++count;
??}
??if(flag)//說明是連通圖
??{
???if(count==2||count==0)
????printf("Yes\n");
???else
????printf("No\n");
??}
??else
???printf("No\n");
?}
?return 0;
}
轉載于:https://www.cnblogs.com/dongsheng/archive/2012/05/30/2527029.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的NYOJ-42 一笔画问题的全部內容,希望文章能夠幫你解決所遇到的問題。