题目大意:判断是否是欧拉回路,独立点不算进来
解题思路:判断除处理点以外的点是否连通,然后判断度数是否为偶数
#include <stdio.h> #include <iostream> #include <string.h> using namespace std; int m, n; int on[300]; int reach[300][300]; int du[300]; int flag[300]; int dfs(int a) { flag[a] = 1; for(int i = 0; i < m; i++) { if(reach[a][i] && !flag[i]) { reach[a][i]--; reach[i][a]--; dfs(i); } } return 0; } int main() { while(cin >> m >> n) { int x, y; int z = 0; int s = 0; memset(on, 0, sizeof(on)); memset(du, 0, sizeof(du)); memset(reach, 0, sizeof(reach)); memset(flag, 0, sizeof(flag)); for(int i = 0; i < n; i++) { cin >> x >> y; reach[x][y] = 1; reach[y][x] = 1; du[x]++; du[y]++; if(x != y) { s = 1; on[x] = 1; on[y] = 1; z = x; } } dfs(z); for(int i = 0; i < m; i++) { if(on[i] && (flag[i] != 1 || du[i] % 2 != 0)) { s = 0; break; } } if(s == 1) printf("Possible\n"); else printf("Not Possible\n"); } return 0; }