Pagini recente » Cod sursa (job #2295773) | Cod sursa (job #556530) | Cod sursa (job #377770) | Cod sursa (job #2726026) | Cod sursa (job #634610)
Cod sursa(job #634610)
#include<fstream>
#include<vector>
#include<stack>
using namespace std;
///////////////////////
#define MaxBuffer 8192
char buffer[MaxBuffer];
int bufferIndex=8191;
///////////////////////
vector <pair <int,bool> > v[100100];
vector <int> sol,d;
stack <int> s;
bool viz[100100];
int n,start[100100];
inline void read_buffer(istream& in,int& x) {
do {if(++bufferIndex==MaxBuffer) {
bufferIndex=0;
in.read(buffer,MaxBuffer);
}
}while( buffer[bufferIndex]<'0'||buffer[bufferIndex]>'9' );
for(x=0;buffer[bufferIndex]>='0'&&buffer[bufferIndex]<= '9';) {
x=x*10+buffer[bufferIndex]-'0';
if(++bufferIndex==MaxBuffer) {
bufferIndex=0;
in.read(buffer,MaxBuffer);
}
}
}
void erase_(int nod,int k) {
for(int i=0;i<v[nod].size();i++)
if(v[nod][i].first==k&&v[nod][i].second==1) {
v[nod][i].second=0;
break;
}
}
void BFS() {
unsigned int i,j,nod,vecin;
for(i=0;i<d.size();i++) {
nod=d[i];
for(j=0;j<v[nod].size();j++) {
vecin=v[nod][j].first;
if(!viz[vecin]) {
viz[vecin]=1;
d.push_back(vecin);
}
}
}
}
bool valid() {
int i;
for(i=1;i<n;i++)
if(v[i].size()%2) return 0;
/*d.push_back(1);
viz[1]=1;
BFS();
for(i=1;i<=n;i++)
if(!viz[i]) return 0;*/
return 1;
}
void afis(int ans) {
ofstream out("ciclueuler.out");
if(ans==-1)
out<<"-1";
else
for(unsigned int i=1;i<sol.size();out<<sol[i++]<<" ");
out<<'\n';
out.close();
}
void DFS() {
int nod,vecin,ok;
while(!s.empty()) {
nod=s.top();
ok=1;
for(;start[nod]<v[nod].size();start[nod]++)
if(v[nod][start[nod]].second) {
v[nod][start[nod]].second=0;
vecin=v[nod][start[nod]].first;
erase_(vecin,nod);
s.push(vecin);
start[nod]++;
ok=0;
break;
}
if(ok)
sol.push_back(nod),s.pop(),ok=0;
}
}
void citire() {
int i,x,y,m;
ifstream in("ciclueuler.in");
read_buffer(in,n);read_buffer(in,m);
for(i=0;i<m;i++) {
read_buffer(in,x);read_buffer(in,y);
v[x].push_back(pair<int,bool>(y,1));
v[y].push_back(pair<int,bool>(x,1));
}
in.close();
}
int main() {
citire();
if(valid()) {
s.push(1);
DFS();
afis(1);
}
else afis(-1);
return 0;
}