Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <stack>
- #include <vector>
- #define nmax 100005
- using namespace std;
- ifstream fin("ciclueuler.in");
- ofstream fout("ciclueuler.out");
- vector < pair< int , int > > G[nmax];
- stack < int > S;
- int n,m,visited[nmax*5],k,sol[nmax*5],x,y,nodStiva;
- void dfs(int nod)
- {
- int nodStiva, vecin, indMuchie;
- S.push(nod);
- while(!S.empty()) {
- nodStiva=S.top();
- if( !G[nodStiva].empty()){
- vecin=G[nodStiva].back().first;
- indMuchie = G[nodStiva].back().second;
- G[nodStiva].pop_back();
- if(!visited[indMuchie]) {
- visited[indMuchie] = true;
- S.push(vecin);
- }
- }
- else{
- k++;
- sol[k]=nodStiva;
- S.pop();
- // if(S.empty() == false) fout<<nodStiva<<" ";
- }
- }
- }
- int main()
- {
- fin>>n>>m;
- for(int i =1 ; i <=m ;i++)
- {
- fin>>x>>y;
- G[x].push_back(make_pair(y,i));
- G[y].push_back(make_pair(x,i));
- }
- //verific grad
- for(int i = 1; i <= n ;i++)
- {
- if(G[i].size()%2==1)
- {
- fout<<-1;
- return 0;
- }
- }
- dfs(1);
- for(int i = 1; i < k ; i++)
- fout<<sol[i]<<" ";
- fout<<'\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement