Pagini recente » Cod sursa (job #1096520) | Cod sursa (job #2727412) | Cod sursa (job #836663) | Cod sursa (job #1216289) | Cod sursa (job #2327730)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int VAL=500005;
int N, M, i, j, F, nr;
int A[VAL], B[VAL];
int st[VAL], top;
bool viz[VAL], gas;
vector <int> G[VAL];
void Euler_Cycle(int nod)
{
if (top==M)
{
gas=true;
for (int i=1; i<=M; i++)
fout << st[i] << " ";
return;
}
vector <int> :: iterator it;
int nod2;
for (it=G[nod].begin(); it!=G[nod].end(); it++)
{
if (viz[*it]==true)
continue;
nod2=A[*it];
if (A[*it]==nod)
nod2=B[*it];
viz[*it]=true;
st[++top]=nod2;
Euler_Cycle(nod2);
if (gas==true)
return;
top--;
viz[*it]=false;
}
}
int main()
{
fin >> N >> M;
for (i=1; i<=M; i++)
{
fin >> A[i] >> B[i];
G[A[i]].push_back(i);
G[B[i]].push_back(i);
}
for (i=1; i<=N; i++)
if (G[i].size() % 2==1)
nr++;
if (nr>0)
{
fout << -1;
fin.close();
fout.close();
return 0;
}
st[1]=top=1;
Euler_Cycle(1);
fin.close();
fout.close();
return 0;
}