Pagini recente » Cod sursa (job #3187935) | Cod sursa (job #1759773) | Cod sursa (job #2881726) | Cod sursa (job #1686555) | Cod sursa (job #2374173)
#include <bits/stdc++.h>
using namespace std;
const int nmax=100005;
struct numere
{
int nod;
int poz;
};
int grad[nmax];
bool vis[5*nmax];
deque <int> rasp;
stack <int> st;
vector <numere> g[nmax];
void dfs(int start_node)
{
st.push(start_node);
for(int i=0;i<g[start_node].size();i++)
{
if(vis[g[start_node][i].poz]==false)
{
grad[start_node]--;
grad[g[start_node][i].nod]--;
vis[g[start_node][i].poz]=true;
dfs(g[start_node][i].nod);
}
}
while(!st.empty())
{
if(grad[st.top()]!=0)
break;
rasp.push_back(st.top());
st.pop();
}
}
bool corect(int n)
{
for(int i=1;i<=n;i++)
if(grad[i]%2==1)
return false;
return true;
}
int main()
{
FILE *in, *out;
int n, m;
in=fopen("ciclueuler.in", "r");
out=fopen("ciclueuler.out", "w");
fscanf(in, "%d%d", &n, &m);
for(int i=1;i<=m;i++)
{
int x, y;
fscanf(in, "%d%d", &x, &y);
grad[x]++;
grad[y]++;
numere k;
k.nod=x;
k.poz=i;
g[y].push_back(k);
k.nod=y;
g[x].push_back(k);
}
if(corect(n)==false)
{
fprintf(out, "-1");
return 0;
}
dfs(1);
rasp.pop_front();
while(rasp.size())
{
fprintf(out, "%d ", rasp.back());
rasp.pop_back();
}
fclose(in);
fclose(out);
return 0;
}