372
Cerința
Se dă un graf neorientat cu n vârfuri care este conex și are gradele tuturor vârfurilor pare. Determinați un ciclu eulerian.
Date de intrare
Fișierul de intrare euler.in conține pe prima linie numărul n, iar pe a următoarele linii perechi de numere i j, cu semnificația că există muchie de la i la j.
Date de ieșire
Fișierul de ieșire euler.out va conține pe prima linie numărul C de vârfuri din ciclul eulerian determinat, iar pe linia următoare vârfurile acestui ciclu, separate prin exact un spațiu.
Restricții și precizări
1 ≤ n ≤ 2001 ≤ i,j ≤ n- în ciclul afișat, primul și ultimul element sunt egale
Exemplu
euler.in
6 1 2 1 3 2 3 2 4 2 5 3 5 3 6 4 5 5 6
euler.out
10 1 2 4 5 3 6 5 2 3 1
#include <bits/stdc++.h>
using namespace std;
ifstream cin("euler.in");
ofstream cout("euler.out");
int n , a[202][202] , x , y , L[40001] , cnt;
void Euler(int k)
{
for(int i = 1 ; i <= n ; i ++)
if(a[k][i] == 1)
{
a[k][i] = a[i][k] = 0;
Euler(i);
}
L[++cnt] = k;
}
int main()
{
cin >> n;
while(cin >> x >> y)
a[x][y] = a[y][x] = 1;
Euler(1);
cout << cnt << '\n';
for(int i = 1 ; i <= cnt ; i++)
cout << L[i] << " ";
}
Comentarii