题目的意思就是给出一共有几个点,然后下面是一些路(连接两点),问有没有欧拉回路。(注意有孤立点,一开始没有排除孤立点WA了);
AC代码:
#include<iostream>
using namespace std;
const int N = 200 + 5;
int m, n;
int vis[N];
int g[N][N];
int num[N];
int count;
int count2;
bool ok;
void init() {
for (int i = 0 ; i < N ; i++) {
for (int j = 0 ; j < N ; j++) {
g[i][j] = 0;
}
vis[i] = 0;
num[i] = 0;
}
count = 0;
count2 = 0;
ok = true;
}
void linked (int u) {
vis[u] = true;
count++;
for (int i = 0 ; i < m; i++) {
if(g[u][i] && !vis[i]) {
linked(i);
}
}
return ;
}
/*void dfs(int u) {
for (int i = 0 ; i < m ;i++) {
if (g[u][i]) {
g[u][i]--;
g[i][u]--;
dfs(i);
}
}
return;
}*/
int main () {
int op,ed;
while (cin >> m >> n) {
init();
for (int i = 0; i < n ;i ++) {
cin >> op >> ed;
g[op][ed]++;
g[ed][op]++;
num[op]++;
num[ed]++;
}
int k;
for (int i = 0 ;i < m; i++) {
if (num[i]) {
k = i;
break;
}
}
for (int i = 0; i < m ; i++) {
if(num[i])
count2++;
if (num[i] % 2 != 0) {
ok = false;
break;
}
}
linked(k);
if (count != count2)
ok = false;
if(ok)
cout << "Possible"<<endl;
else
cout << "Not Possible"<<endl;
}
return 0;
}