Cod sursa(job #2646927)

Utilizator numecompletnume complet numecomplet Data 2 septembrie 2020 14:27:29
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>
#define NMAX 100009
#define MMAX 500009
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
//prima varianta
vector<int> sol;
struct tip{ int x; int nr;};
vector<tip> g[NMAX];
int n,m;
bool uz[MMAX];///pt muc
bool fol[NMAX];
void citire();
void euler(int k);
void afisare();
bool check();
bool check1();

int main()
{citire();
if(check())
    {euler(1);
    if(check1())
        afisare();
        else
            fout<<-1;
    }
    else
        fout<<-1;
    return 0;
}
void citire()
{
    int i;
    fin>>n>>m;
    int x,y;
    for(i=1;i<=m;i++)
         {fin>>x>>y;
          g[x].push_back({y,i});
          g[y].push_back({x,i});
         }
}
bool check()
{
    int i;
    for(i=1;i<=n;i++)
        if( g[i].size()%2)
          break;
    return i==n+1;
}
bool check1()
{
  int i;
  for(i=1;i<=n;i++)
    if(!fol[i])
    break;
  return i==n+1;
}
void euler(int k)
{
  fol[k]=1;
  int i;
  for(i=0;i<g[k].size();i++)
    {
     int vec=g[k][i].x;

     int care=g[k][i].nr;
     if(!uz[care])
        {
         uz[care]=1;
         euler(vec);

        }
    }
 sol.push_back(k);
}
void afisare()
{int i;
  for (i=0;i<sol.size()-1;i++)
        fout<<sol[i]<<" ";
  fout<<'\n';
}