就是将图连接起来。
所谓的深度优先之类的吧。
记录当前路径能否得到最后结果,不能则弹出,继续改变其它位搜索。
记录哪些位用过了。
class Solution {
public:
bool getCode(int n,vector<bool> &used,vector<int> &r)
{
if(r.size()==used.size()) return true;
int r_bit=0;
int top=r.back();
int next=top ^ (1<<r_bit);
r_bit=r_bit+1;
while(r_bit<=n)
{
while(used[next]==true && r_bit<n)
{
next=top ^ (1<<r_bit);
r_bit=r_bit+1;
}
if(used[next]==false)
{
used[next]=true;
r.push_back(next);
if(getCode(n,used,r))return true;
else
{
used[next]=false;
r.pop_back();
}
}
}
return false;
}
vector<int> grayCode(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int max_count=1<<n;
vector<bool> used(max_count,false);
vector<int> r;
int top=0;
r.push_back(top);
used[top]=true;
getCode(n,used,r);
return r;
}
};