Pagini recente » Cod sursa (job #2976359) | Cod sursa (job #2790203) | Cod sursa (job #2950627) | Cod sursa (job #573939) | Cod sursa (job #1027491)
#include<fstream>
#include<vector>
#include<cstring>
#define NMAX 100005
//153319LU
using namespace std;
FILE* f=freopen("ciclueuler.in","r",stdin);
FILE* o=freopen("ciclueuler.out","w",stdout);
vector<int> graph[NMAX];
vector<vector<int> > solution;
int isIntersection[NMAX];
int loops[NMAX];
int indSol;
int nrm;
int n,m;
int aux;
void GetSolution()
{
int cNod=1;
solution[0].push_back(1);
while(nrm<m)
{
int nextNode=0;
while(cNod)
{
int found=0;
for(int i=0;i<graph[cNod].size();++i)
{
if(graph[cNod][i]!=-1)
{
if(i+1<graph[cNod].size())
nextNode=cNod;
nrm+=1;
solution[indSol].push_back(graph[cNod][i]);
int aux=cNod;
cNod=graph[cNod][i];
graph[aux][i]=-1;
found=1;
break;
}
}
if(!found) cNod=0;
}
if(nextNode)
{
solution.push_back(vector<int>());
indSol+=1;
isIntersection[nextNode]=indSol;
cNod=nextNode;
}
else
{
break;
}
}
}
void WriteSolution(int k)
{
for(int i=0;i<solution[k].size()&&nrm<m-1;++i)
{
printf("%d ",solution[k][i]);
nrm+=1;
while(loops[solution[k][i]]) {
printf("%d ",solution[k][i]); loops[solution[k][i]]-=1;
}
if(isIntersection[solution[k][i]])
{
aux=isIntersection[solution[k][i]];
isIntersection[solution[k][i]]=0;
WriteSolution(aux);
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<m;++i)
{
int x,y;
scanf("%d%d",&x,&y);
if(x==y) loops[x]+=1,nrm+=1;
else{
if(isIntersection[x]==0)
{
graph[x].push_back(y);
isIntersection[x]=1;
isIntersection[y]=0;
}
else
{
graph[y].push_back(x);
isIntersection[y]=1;
isIntersection[x]=0;
}
}
}
memset(isIntersection,0,(sizeof(int)*(n+1)));
solution.push_back(vector<int>());
GetSolution();
nrm=0;
WriteSolution(0);
return 0;
}