题目意思:给定n个点,判断由某一点出发最后能否回到原点
解题思路:比较简单的欧拉回路的应用,根据欧拉回路的性质,所有节点的度数(入度加出度)都是偶数,我么只须要开一个road数组存储每一个节点的度数,最后遍历数组判断是不是全部都是偶数即可
代码:
//简单的欧拉回路的应用
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int MAXN = 210;
int n , r;
int road[MAXN];//存储节点的度数
int main(){
int x , y , i , j , mark;
while(~scanf("%d%d" , &n , &r)){
memset(road , 0 , sizeof(road));
mark = 0;
for(i = 0 ; i < r ; i++){
scanf("%d%d" , &x , &y);
road[x]++;
road[y]++;
}
if(r != 0){
for(j = 0 ; j < n ; j++){
if(road[j] %2 != 0){
mark = 0;
break;
}
}
if(j == n)
mark = 1;
}
if(mark)
printf("Possible\n");
if(mark == 0)
printf("Not Possible\n");
}
return 0 ;
}