题目意思:给定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 ; }
时间: 2024-11-01 21:25:40