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 ≤ 200
1 ≤ 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] << " "; }