Pagini recente » Cod sursa (job #590948) | Cod sursa (job #1534088) | Cod sursa (job #2457569) | Cod sursa (job #1417414) | Cod sursa (job #1323314)
#include <fstream>
#include <vector>
using namespace std;
#define PII pair<int,int>
#define x first
#define y second
ifstream is ("ciclueuler.in");
ofstream os ("ciclueuler.out");
int N, M;
vector <PII> E;
vector <int> G[100051], Circuit;
bool B[500001];
bool IsEuler();
void DFS(int i);
int main()
{
is >> N >> M;
E.resize(M+1);
for (int i = 1, a, b; i <= M; ++i)
{
is >> a >> b;
G[a].push_back(i);
G[b].push_back(i);
E[i] = {a, b};
}
if (IsEuler())
{
DFS(1);
for (int i = 0; i < Circuit.size()-1; ++i)
os << Circuit[i] << ' ';
}
else
os << -1;
is.close();
os.close();
}
#define e G[i].back()
void DFS(int i)
{
while (!G[i].empty())
{
if (B[e])
{
G[i].pop_back();
continue;
}
B[e] = 1;
DFS(E[e].x + E[e].y - i);
}
Circuit.push_back(i);
};
bool IsEuler()
{
for (int i = 1; i <= N; ++i)
if (G[i].size() % 2 == 1) return 0;
return 1;
};