Pagini recente » Cod sursa (job #2270897) | Cod sursa (job #1652056) | Rezultatele filtrării | Cod sursa (job #2170168) | Cod sursa (job #1461314)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define MAX 100000
/*fisiere de intrare respectiv iesire*/
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
/*lista de adiacenta*/
vector<int> graf[MAX];
vector<int> copieGraf[MAX];
/*ciclu euler*/
vector<int> ciclu;
/*functie de eliminare a unui element dintr-o lista de adiacenta*/
bool EraseElement(vector<int> &v, int elem)
{
vector<int>::iterator it;
for(it = v.begin(); it != v.end(); it++)
{
if(*it == elem)
break;
}
if(it != v.end())
{
v.erase(it);
return true;
}
return false;
}
/*Functie de citrire*/
void Citire()
{
int n, m;
fin >> n >> m;
for(int i = 0; i < m; i++)
{
int nod1, nod2;
fin >> nod1 >> nod2;
// cout << nod1 << " " << nod2 << endl;
graf[nod1].push_back(nod2);
graf[nod2].push_back(nod1);
}
for(int i = 1; i <= n; i++)
copieGraf[i] = graf[i];
/* for(int i = 1; i <= n; i++)
{
cout << "Nodul " << i << " : ";
for(vector<int>::iterator it = graf[i].begin(); it != graf[i].end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
*/
}
void Euler(int nod)
{
while(!graf[nod].empty())
{
int adiacent = graf[nod].front();
EraseElement(graf[nod], adiacent);
EraseElement(graf[adiacent], nod);
Euler(adiacent);
}
ciclu.push_back(nod);
}
bool Verificare()
{
for(vector<int>::iterator it = ciclu.begin(); it != ciclu.end()-1; it++)
{
if(!EraseElement(copieGraf[*it], *(it+1)))
return false;
else
EraseElement(copieGraf[*(it+1)], *it);
}
return true;
}
int main()
{
Citire();
Euler(1);
if(Verificare())
for(vector<int>::iterator it = ciclu.begin(); it != ciclu.end(); it++)
fout << *it << " ";
else
fout << "-1";
return 0;
}