Pagini recente » Cod sursa (job #1524561) | Cod sursa (job #743433) | Cod sursa (job #902041) | Cod sursa (job #2574495) | Cod sursa (job #1252125)
#include <fstream>
#include <list>
#include <stack>
#include <queue>
using namespace std;
list<int> adiac[100001];
char visited[100001];
int n;
list<int>::iterator it;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
char isEuler()
{
for (int i = 1; i <= n; ++i)
if (adiac[i].size() % 2)
return 0;
return 1;
}
char isConvex()
{
queue<int> q;
q.push(1);
int i, k = 1;
visited[1] = 1;
while (!q.empty())
{
i = q.front();
q.pop();
for (it = adiac[i].begin(); it != adiac[i].end(); ++it)
{
if (!visited[*it])
{
q.push(*it);
visited[*it] = 1;++k;
}
}
}
if (n == k)
return 1;
return 0;
}
void showEuler(int start)
{
stack<int> st;
st.push(start);
int top, next;
while(!st.empty())
{
top = st.top();
while (!adiac[top].empty())
{
next = adiac[top].front();
adiac[top].pop_front();
for (it = adiac[next].begin(); *it != top; ++it);
adiac[next].erase(it);
st.push(next);
top = st.top();
}
if (st.size() > 1)
fout<< st.top() << " ";
st.pop();
}
}
int main()
{
//FILE *fin = fopen("ciclueuler.in", "r");
//FILE *fout = fopen("ciclueuler.out", "w");
int m, i, j;
//fscanf(fin, "%d %d", &n, &m);
fin >> n >> m;
while (m--)
{
fin >> i >> j;
//fscanf(fin, "%d %d", &i, &j);
adiac[i].push_front(j);
adiac[j].push_front(i);
}
if (isConvex() && isEuler())
{
showEuler(1);
fout << "\n";
}
else
fout << "-1\n";
//fprintf(fout, "")
//fclose(fin);
//fclose(fout);
return 0;
}