您的位置:首页 > 其它

POJ 1392 Ouroboros Snake

2013-08-07 20:01 239 查看
AC得很诡异,表示其实自己都没有看懂。难道这就是Fleury算法?

有没有路过的大神帮忙解释下。

#include <string.h>
#include <stdio.h>
#include <algorithm>
using namespace std;

#define FOR(i,a,b) for(int i=(a); i<=(b); i++)
#define REP(i,a,b) for(int i=(a); i<(b); i++)
#define clr(a,b) memset(a,b,sizeof(a))

const int MAXN = 50010;
int g[MAXN][2];
int n,k,m;
int st[MAXN],tot;

void dfs(int u) {
REP(i,0,2) {
if(g[u][i] == 0) {
g[u][i] = 1;
dfs(((u<<1)|i)&m);
st[++tot] = (u<<1)|i;
}
}

}

int main() {
while(~scanf("%d%d", &n, &k),n||k) {
clr(g,0);
tot = 0;
m = (1<<(n-1))-1;
dfs(0);
printf("%d\n", st[tot-k]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: