#include
#include
const int maxn = 16;
int change[4][2] = {{0,1},{-1,0},{0,-1},{1,0}};//简化移动
int visit[1<
<= 4;i++) {//对于每一个状态q[head],有16种下一个状态,依次广搜
for(int j = 1;j <= 4;j++) {
int t = temp;
int pos = (i-1)*4+j;
t ^= (1 << (16-pos));
for(int k = 0;k < 4;k++) {//对于每一个变化,改变其上下左右
if(i+change[k][0] >= 1 && i+change[k][0] <= 4 && j+change[k][1] >= 1 && j+change[k][1] <= 4) {
int pos2 = (i+change[k][0] - 1)*4 + j+change[k][1];
t ^= (1 << (16 - pos2));
}
}
if(visit[t] == 0) {//求得的状态t,是否已经访问,为访问,则入队
visit[t] = 1;
q[tail] = t;
count[tail] = c+1;
tail++;
}
}
}
head++;
}
return -1;
}
int main() {
memset(visit,0,sizeof(visit));
memset(q,0,sizeof(q));
memset(count,0,sizeof(count));
int first = 0;
for(int i = 1;i <= 4;i++) {
for(int j = 1;j <= 4;j++) {
char c;
scanf("%c",&c);
if(c == 'b') {
first = first*2 + 1;
} else {
first = first*2;
}
}
getchar();
//scanf("\n");
}
//printf("%x\n",first);
int rslt = bfs(first);
if(rslt == -1) {
printf("Impossible");
} else {
printf("%d",rslt);
}
return 0;
}
/*
bwwb
bbwb
bwwb
bwww
bwww
wwww
wwww
wwww
wwww
wwww
wwww
wwww
*/
使用二进制进行BFS Flip Game
最新推荐文章于 2021-02-22 01:19:55 发布