链接:点击打开链接
题意:给出编号为0~n-1的城市,现在要求输出一条路径满足起点是m,并且每个城市只能通过一次,并且相邻两个城市的编号异或为2的k次幂,k为任意整数
代码:
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
int toGary(int x){ //转换成格雷码
return x^(x>>1);
}
int toBin(int x){ //格雷码转换成二进制
int ans;
ans=x;
while(x>>=1)
ans^=x;
return ans;
}
int main(){
int n,m,i,j,st;
while(scanf("%d%d",&n,&m)!=EOF&&(n||m)){
st=toBin(m); //把初始m当成第一个格雷码
for(i=st;i<n;i++) //转换成对应的二进制,直接
printf("%d ",toGary(i)); //按顺序输出
for(i=0;i<st;i++)
printf("%d ",toBin(i));
printf("\n");
}
return 0;
}