一笔画问题201512-4CCF
http://blog.csdn.net/gl486546/article/details/77462338
//头文件影响速度???
#include <stdio.h>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
bool vis[10001][10001];
int degree[10001];
void dis(vector<int> v)
{
int i=v.size()-1;
while(i>=0) printf("%d ",v[i--]);
}
int main()
{
int n,m,sum=0;
vector<int> ans,v[10001];
stack<int> st;
scanf("%d%d",&n,&m);
for(int i=0;i<m;++i)
{
int u,w;
scanf("%d%d",&u,&w);
v[u].push_back(w);
v[w].push_back(u);
degree[u]++;degree[w]++;
}
for(int i=1;i<=n;++i)
{
sort(v[i].begin(),v[i].end());
if(degree[i]&1) sum++;
}
st.push(1);
while(!st.empty())
{
int u=st.top();
bool flag=false;
for(unsigned int i=0;i<v[u].size();++i)
{
int w=v[u][i];
if(!vis[w][u])
{
flag=true;
st.push(w);
vis[u][w]=vis[w][u]=true;
break;
}
}
if(!flag)
{
ans.push_back(u);
st.pop();
}
}
if(ans.size()==m+1&&(sum==0||(sum==2&°ree[1]&1))) dis(ans);
else printf("-1");
return 0;
}