dfs求解欧拉回路
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
int n, k, m, len;
int list[1 << 16], ans[1 << 16];
void dfs(int v) {
int w;
while (list[v] < 2) {
w = (v << 1) + list[v];
list[v]++;
dfs(w & m);
ans[len++] = w;
}
}
int main() {
while (scanf("%d%d", &n, &k) && n) {
m = (1 << (n - 1)) - 1;
memset(list, 0, sizeof(list));
len = 0;
dfs(0);
// for(int i=0;i<len;i++){
// printf("%d ",ans[i]);
// }
// cout << endl;
// cout << endl;
printf("%d\n", ans[len - k - 1]);
}
}