Pagini recente » Profil leleflorin | Cod sursa (job #1290449) | Cod sursa (job #1649003)
#include<iostream>
#include<fstream>
#include<vector>
#include<stack>
#define Nmax 100007
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
stack <int> q;
vector <int> L[Nmax];
bool viz[Nmax];
int N, M, d[Nmax];
void Citire()
{
int i, j, x, y;
fin >> N >> M;
for (i=1; i<=M; i++)
{
fin >> x >> y;
L[x].push_back(y);
L[y].push_back(x);
d[x]++; d[y]++;
}
}
int Grade_pare()
{
int i;
for (i=1; i<=N; i++)
if (d[i] % 2 == 1)
return 0;
return 1;
}
void DFS(int k)
{
int i;
viz[k] = 1;
for (int j=0; j<L[k].size(); j++)
{
i = L[k][j];
if (!viz[i]) DFS(i);
}
}
int Este_conex()
{
DFS(1);
for (int i=1; i<=N; i++)
if (!viz[i]) return 0;
return 1;
}
int Este_eulerian()
{
if (!Grade_pare()) return 0;
if (!Este_conex()) return 0;
return 1;
}
void Sterge_muchie(int i, int k)
{
for (int j=0; j<L[i].size(); j++)
{
if (L[i][j] == k)
{
L[i][j] = L[i][L[i].size()-1];
L[i].pop_back();
return;
}
}
}
void Euler(int k)
{
int i;
while (L[k].size() > 0)
{
i = L[k][0];
/// Sterg muchia (k,i)
L[k][0] = L[k][L[k].size()-1];
L[k].pop_back();
/// Sterg muchia (i,k)
Sterge_muchie(i, k);
Euler(i);
}
q.push(k);
}
int main ()
{
Citire();
if (!Este_eulerian()) fout << "-1\n";
else
{
Euler(1);
q.pop();
while(!q.empty())
{
fout << q.top() << " ";
q.pop();
}
}
fout << "\n";
fin.close();
fout.close();
return 0;
}