Pagini recente » Cod sursa (job #1204782) | Cod sursa (job #2348764) | Cod sursa (job #430019) | Cod sursa (job #1773595) | Cod sursa (job #1133997)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
#define maxn 100005
vector <pair <int,int> > muchii[maxn];
queue <int> saferoad;
bool b[maxn];
int n,m,i,x,y,sz,to,where,now;
void conexdfs(int now)
{
b[now]=true;
int i,to;
queue <int> q;
q.push(now);
while (!q.empty())
{
now=q.front();
for (i=0;i<muchii[now].size();i++)
{
to=muchii[now][i].first;
if (b[to]==false)
{
b[to]=true;
q.push(to);
}
}
q.pop();
}
}
ofstream g("ciclueuler.out");
void go(int now)
{
while (muchii[now].back().first==-1)
muchii[now].pop_back();
if (muchii[now].size()==0)
return;
to=muchii[now].back().first;
where=muchii[now].back().second;
muchii[to][where].first=-1;
muchii[now].back().first=-1;
g<<to<<' ';
go(to);
}
int main(void)
{
FILE * f;
f=fopen("ciclueuler.in","r");
fscanf(f,"%d%d",&n,&m);
for (i=1;i<=m;i++)
{
fscanf(f,"%d%d",&x,&y);
muchii[x].push_back(make_pair(y,muchii[y].size()));
muchii[y].push_back(make_pair(x,muchii[x].size()-1));
}
conexdfs(1);
for (i=1;i<=n;i++)
if ((b[i]==false)||(muchii[i].size()==0)||(muchii[i].size()%2==1))
{
g<<"-1\n";
return 0;
}
//saferoad.push(1);
//sz=muchii[1].size();
//saferoad.push(muchii[1][sz-1].first);
//to=muchii[1][sz-1].first;
//where=muchii[1][sz-1].second;
//muchii[to][where].first=-1;
//cout<<"Marked muchii["<<to<<"]["<<where<<"]\n";
//muchii[1][sz-1].first=-1;
//cout<<"Marked muchii["<<1<<"]["<<sz-1<<"]\n";
//while (saferoad.back()!=1)
//{
// now=saferoad.back();
// cout<<now<<' '<<muchii[now].size()<<'\n';
// while (muchii[now].back().first==-1)
// {
// //cout<<"Popped from "<<now<<" : "<<muchii[now][muchii[now].size()-1].first<<' '<<muchii[now][muchii[now].size()-1].second<<'\n';
// muchii[now].pop_back();
// }
// sz=muchii[now].size();
// to=muchii[now][sz-1].first;
// where=muchii[now][sz-1].second;
// muchii[now][sz-1].first=-1;
//cout<<"Marked muchii["<<now<<"]["<<sz-1<<"]\n";
// muchii[to][where].first=-1;
//cout<<"Marked muchii["<<to<<"]["<<where<<"]\n";
// saferoad.push(to);
//}
//while (saferoad.size()!=1)
//{
// //cout<<now<<' ';
// now=saferoad.front();
// g<<now<<' ';
// go(now);
// saferoad.pop();
//}
go(1);
return 0;
}