题目大意:判断是否可以一条路走回原点,不考虑孤立点。
解题思路:判断无向图的欧拉回路,dfs判断连通,有度数的则要有被连通标记过,因为有度数的不是孤立点,存在被标记的度数则要求为偶数。
ac代码:
#include <iostream>
#include <cstring>
using namespace std;
int map[205][205], du[205], t1, t2, vis[205], n, m, jud;
void dfs(int u)
{
vis[u] = 1;
for (int i=0; i<n; i++)
if (!vis[i] && map[u][i])
dfs(i);
}
int main()
{
while (scanf("%d%d", &n, &m)!=EOF){
memset(map, 0, sizeof(map));
memset(du, 0, sizeof(du));
memset(vis, 0, sizeof(vis));
jud = 1;
for (int i=0; i<m; i++){
scanf("%d%d", &t1, &t2);
map[t1][t2] = map[t2][t1] = 1;
du[t1]++, du[t2]++;
}
for (int i=0; i<n; i++)
if (du[i]){
dfs(i);
break;
}
for (int i=0; i<n; i++)
if (du[i] && !vis[i] || du[i] % 2)
jud = 0;
if (jud && m)
printf("Possible\n");
else
printf("Not Possible\n");
}
return 0;
}