Pagini recente » Cod sursa (job #1350222) | Cod sursa (job #1493491) | Cod sursa (job #2605953) | Cod sursa (job #721119) | Cod sursa (job #1784046)
#include <iostream>
#include <fstream>
#include <cstring>
#include <queue>
#include <stack>
using namespace std;
ifstream f ("ciclueuler.in");
ofstream g ("ciclueuler.out");
int a[101][101];
int vizitat[101],n,i,x,y,m,nod;
queue < int > Q;
vector < int > v[101];
vector < int > :: iterator ii;
stack < int > st;
bool bun()
{
for(int i = 1; i <= n; i++)
if(vizitat[i] % 2 != 0)
return false;
return true;
}
bool dfs()
{
memset(vizitat,0,sizeof(vizitat));
int k = 1;
Q.push(1);
vizitat[1] = 1;
while(!Q.empty())
{
x = Q.front();
Q.pop();
ii = v[x].begin();
while(ii != v[x].end())
{
if(!vizitat[*ii])
vizitat[*ii] = 1,Q.push(*ii),k++;
ii++;
}
}
if(k == n)
return true;
return false;
}
void bfs()
{
st.push(1);
while(!st.empty())
{
int k = 0,poz = 0;
nod = st.top();
ii = v[nod].begin();
while(ii != v[nod].end())
{
if(a[nod][*ii] != 0)
poz = *ii,k = 1;
ii++;
}
if(k == 1)
st.push(poz),a[nod][poz]--,a[poz][nod]--;
else
{
st.pop();
if(!st.empty())
g << nod <<" ";
}
}
}
int main()
{
f >> n >> m;
for(i = 1; i <= m; i++)
{
f >> x >> y;
vizitat[x]++;
vizitat[y]++;
v[x].push_back(y);
v[y].push_back(x);
a[x][y]++;
a[y][x]++;
}
if(bun() && dfs())
bfs();
else
g << -1;
return 0;
}