RE了,实在找不出bug。
#include <bits/stdc++.h>
using namespace std;
int n,vis[100001];
struct f
{
int a,step;
f(int x,int y)
{
a=x;
step=y;
}
};
queue<f>q;
int f1(int d,int y)
{
return (y&(1<<d))>>d;
}
int main()
{
int n;
cin>>n;
if(n==255)
{
cout<<0;
return 0;
}
q.push(f(n,0));
vis[n]=1;
while(!q.empty())
{
f x=q.front();
q.pop();
for(int i=0;i<=15;i++)
{
int s=0,z=f1(i,x.a);
if(i%4!=0)
{
if(z!=f1(i-1,x.a))
{
if(z==1)s=x.a-(1<<i)+1<<(i-1);
else s=x.a+(1<<i)-(1<<(i-1));
if(s==255)
{
cout<<++x.step;
return 0;
}
if(!vis[s])
{
vis[s]=1;
q.push(f(s,x.step+1));
}
}
}
if(i>3)
{
if(z!=f1(i-4,x.a))
{
if(z!=f1(i-1,x.a))
{
if(z==1)s=x.a-(1<<i)+1<<(i-4);
else s=x.a+(1<<i)-(1<<(i-4));
if(s==255)
{
cout<<++x.step;
return 0;
}
if(!vis[s])
{
vis[s]=1;
q.push(f(s,x.step+1));
}
}
}
}
}
}
return 0;
}