Pagini recente » Cod sursa (job #1651906) | Cod sursa (job #873136) | Cod sursa (job #245464) | Cod sursa (job #1404441) | Cod sursa (job #1735261)
//var I iterativ cu stiva expl.
#include<fstream>
#include<vector>
#include<deque>
using namespace std;
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");
int n,m,x,y,i,j,nod,muchieij;
int gr[100003];
bool viz[500003];
vector<int>a[100003];
vector<int>muc[100001];
deque<int>st;
int main()
{
fi>>n>>m;
for(i=1;i<=m;i++)
{
fi>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
muc[x].push_back(i);
muc[y].push_back(i);
gr[x]++;
gr[y]++;
}
for(i=1;i<=n;i++)
if(gr[i]%2==1)
{ fo<<"-1"; return 0; }
st.push_back(1);
while(!st.empty())
{
i=st.back();
if(gr[i]==0)
{ fo<<i<<" "; st.pop_back(); }
else
{
j=a[i].back();
muchieij=muc[i].back();
a[i].pop_back();
muc[i].pop_back();
if(viz[muchieij]==0)
{
viz[muchieij]=1;
st.push_back(j);
gr[i]--;
gr[j]--;
}
}
}
return 0;
}
//var II
////100p (dar fara inline face 70p cred ca creapa stiva?)
//#include <fstream>
//#include <bitset>
//#include <vector>
//#define MAX 100003
//using namespace std;
//ifstream fi("ciclueuler.in");
//ofstream fo("ciclueuler.out");
//
//int n,m,x,y;
//bitset < 5*MAX > viz; //pentru stergerea muchiilor vizitate
//struct muchie {int x,y;} E[5*MAX];//memorarea muchiilor
//vector < int > G[MAX],ciclu;
//
//int VerifEulerian(){
// for(int i=1;i<=n;i++)
// if(G[i].size()%2==1)return 0;
// return 1;
//}
//inline void DF(int nod){ //fara inline la 3 teste crapa stiva?
// for(int i=0;i<G[nod].size();i++)
// if(!viz[G[nod][i]])
// {
// viz[G[nod][i]]=1;
// DF(E[G[nod][i]].x+E[G[nod][i]].y-nod);//(x+y)-x==y
// }
// ciclu.push_back(nod);
//}
//
//int main()
//{
// fi>>n>>m;
// for(int i=1;i<=m;i++)
// {
// fi>>x>>y;
// G[x].push_back(i); G[y].push_back(i);//memorez indicele muchiei
// E[i].x=x,E[i].y=y; //memorez muchia cu indicele i
// }
// if(VerifEulerian())
// {
// DF(1);
// for(int i=0;i<ciclu.size();i++)fo<<ciclu[i]<<' ';
// fo<<'\n';
// }
// else fo<<-1<<'\n';
// return 0;
//}