题意: 给你N个房间(图节点)以及房间之间的门(图的边),且给你初始的房间号M,问你从初始房间走,可不可以经过每个门仅1次,最后到达0号房间.且所有的门都被你走过1次?
#include#include #include #include #define MAX 505using namespace std;char s[MAX];char num[MAX];int degree[MAX];int main(void) { while (scanf("%s", s) == 1 && s[0] == 'S') { memset(degree, 0, sizeof(degree)); int m, n; scanf("%d%d", &m, &n); getchar(); int cnt = 0; for (int i = 0; i < n; i++) { cin.getline(num, 50); for (int j = 0; j < strlen(num); j++) { if (num[j] != ' ' && num[j] != '\n') { cnt++; int to = num[j] - '0'; degree[i]++; degree[to]++; } } } cin >> s; int ji = 0, ou = 0; for (int i = 0; i < n; i++) { if (degree[i] % 2 == 0) ou++; else ji++; } //所有点的度为偶数且从0出发 || 只有两个奇度点,0为其中一个,且从另外一个出发 if (ou == n) { if (m == 0) printf("YES %d\n", cnt); else printf("NO\n"); } else { if (ji == 2 && degree[0] % 2 != 0 && m != 0) { printf("YES %d\n", cnt); } else printf("NO\n"); } } return 0;}