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;
}