poj2965

The Pilots Brothers’ refrigerator

#include “iostream” #include “math.h” using namespace std; unsigned short int flips[16]={0xf888,0xf444,0xf222,0xf111,0x8f88,0x4f44,0x2f22,0x1f11, 0x88f8,0x44f4,0x22f2,0x11f1,0x888f,0x444f,0x222f,0x111f}; int min1=16; unsigned short int poww2(int n) { int i=1; i=i<<n; return i; } void bsp_num(unsigned short int number,int step,int flip) { if(number==0) { min1=(min1<flip?min1:flip); return ; } if(step>=16)return; bsp_num(number,step+1,flip); bsp_num(number^flips[step],step+1,flip+1); } int bsp(unsigned short int number,int step,int flip) { if(number==0) { if(flip==min1) { cout<<flip<<endl; return 1; } else return 0; } if(step>=16)return 0; if(bsp(number,step+1,flip))return 1; if(bsp(number^flips[step],step+1,flip+1)==1) { cout<<(step/4)+1<<” “<<(step%4)+1<<endl; return 1; } else return 0; } int main() { int i=0; unsigned short int num=0; char x; while(i<16) { cin>>x; if(x==’+’) num+=poww2(15-i); i++; } min1=16; bsp_num(num,0,0);//只为求得最小的变化次数 bsp(num,0,0);//在遍历过程中输出,输出结果与顺序无关 return 0; }

这个题和poj1753很类似,以为直接拿过来就能用,后来发现在输出的时候遇到了些问题,写bfs递归输出的时候想了好久,在华仔的帮助下才想明白,还需要多加练习啊!

点赞