hiho 51 歐拉路·三

問題

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

解法

構造有向圖,每條邊表示0~2n1 中的一個數,則求有向圖的歐拉回路。
使用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;
}
發佈了107 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章