您的位置:首页 > 其它

hiho 51 欧拉路·三

2016-04-28 21:54 381 查看

问题

http://hihocoder.com/problemset/problem/1182?sid=784688

解法

构造有向图,每条边表示0~2n−1 中的一个数,则求有向图的欧拉回路。

使用Fleury算法 后path倒序输出才是结果。

#include <bits/stdc++.h>
using namespace std;
enum{maxn = 1<<15};
int G[maxn][2];
bool visit[maxn][2];
int path[maxn];
int pathNum;
int n;
void buildG()
{
int m = 1<<(n-1);
for (int i=0; i<m; ++i)
{
G[i][0] = (i<<1|0) & (m-1);
G[i][1] = (i<<1|1) & (m-1);
}
}
void dfs(int u)
{
for (int i=0; i<2; ++i)
{
if (!visit[u][i])
{
int v = G[u][i];
visit[u][i] = true;
dfs(v);
}
}
path[pathNum++] = u;
}
int main()
{
memset(visit, 0, sizeof(visit));
scanf("%d", &n);
buildG();
pathNum =0;
dfs(0);
for (int i=pathNum-2; i>=0; --i)
{
printf("%c", path[i]&0x01? '1':'0');
}
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: