Pagini recente » Cod sursa (job #1598784) | Cod sursa (job #3265785) | Cod sursa (job #2942191) | Cod sursa (job #3274046) | Cod sursa (job #2367972)
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector<int>graf[100500];
stack<int>myStack;
vector<int>ciclu;
int N, M, i, x, y, grad[100500];
void scoate(int x, int v)
{
vector<int>::iterator it;
for(it = graf[x].begin(); it != graf[x].end(); it++)
if(*it == v)
{
graf[x].erase(it);
--grad[x];
break;
}
for(it = graf[v].begin(); it != graf[v].end(); it++)
if(*it == x)
{
graf[v].erase(it);
--grad[v];
break;
}
}
void Euler(int start)
{
myStack.push(start);
while(!myStack.empty())
{
int k = myStack.top();
if(grad[k])
{
myStack.push(graf[k][0]);
scoate(k, graf[k][0]);
}
else{
ciclu.push_back(k);
myStack.pop();
}
}
ciclu.pop_back();
}
int main()
{
fin>>N>>M;
for(i = 1; i <= M; i++)
{
fin>>x>>y;
if( x != y)
{
graf[x].push_back(y);
graf[y].push_back(x);
++grad[x];
++grad[y];
}
else
{
graf[x].push_back(y);
++grad[y];
}
}
Euler(1);
for(vector<int>::iterator it = ciclu.begin(); it != ciclu.end(); it++)
fout<<*it<<' ';
return 0;
}