#include <stdio.h>
#include <stdlib.h>
#define STATUS 0
#define STEP 1
int queue[1000000][2];
int answer[1<<25];
int head = 0, tail = 0;
void addToQueue(int status, int step){
queue[tail][STATUS] = status;
queue[tail][STEP] = step;
answer[status] = step;
tail++;
}
int main(){
char line[10];
int numQuery, i, j, k, step, status;
for(i=0; i<(1<<25); i++)
answer[i] = -1;
addToQueue((1<<25)-1, 0); //all lights up
while(head < tail){
status = queue[head][STATUS];
step = queue[head][STEP];
if(step < 6){
for(i=0; i<25; i++){
k = status;
// generate new status
k ^= 1<<i; //itself
if(i%5 != 0)
k ^= 1<<(i-1); //left
if(i%5 != 4)
k ^= 1<<(i+1); //right
if(i/5 != 0)
k ^= 1<<(i-5); //up
if(i/5 != 4)
k ^= 1<<(i+5); //down
if(answer[k] == -1)
addToQueue(k, step+1);
}
}
head++;
}
scanf("%d", &numQuery);
for(i=0; i<numQuery; i++){
status = 0;
for(j=0; j<5; j++){
scanf("%s", line);
for(k=0; k<5; k++){
status <<= 1;
status |= line[k]-'0';
}
}
printf("%d\n", answer[status]);
}
return 0;
}
vijos P1197 费解的开关 题解
最新推荐文章于 2023-05-25 16:55:24 发布