您的位置:首页 > 其它

URAL 1122 Game

2015-10-10 14:16 260 查看
#include <stdio.h>

int chips[4][4];
int move[3][3];
int minMoves = 17;

int isInRange(int row, int column){
return row >= 0 && row < 4 && column >= 0 && column < 4;
}

void turnOver(int row, int column){
int i, j;
for (i = -1; i < 2; i++)
for (j = -1; j < 2; j++){
int x = row + i;
int y = column + j;
if (move[1 + i][1 + j] && isInRange(x, y))
chips[x][y] = 1 - chips[x][y];
}
}

int isGameOver(){
int temp = chips[0][0];
int row, column;
for (row = 0; row < 4; row++)
for (column = 0; column < 4; column++)
if (chips[row][column] != temp)
return 0;
return 1;
}

void playGame(int position, int numOfMoves){

if (isGameOver()){
if (numOfMoves < minMoves)
minMoves = numOfMoves;
return;
}

if (numOfMoves >= minMoves - 1 || position >= 16)
return;

int row = position / 4;
int column = position % 4;
turnOver(row, column);
playGame(position + 1, numOfMoves + 1);
turnOver(row, column);
playGame(position + 1, numOfMoves);
}

int main(){

char cha;
int row, column;
for (row = 0; row < 4; row++){
for (column = 0; column < 4; column++){
scanf("%c", &cha);
if (cha == 'W')
chips[row][column] = 0;
else
chips[row][column] = 1;
}
scanf("%c", &cha);
}

for (row = 0; row < 3; row++){
for (column = 0; column < 3; column++){
scanf("%c", &cha);
if (cha == '0')
move[row][column] = 0;
else
move[row][column] = 1;
}
scanf("%c", &cha);
}

playGame(0, 0);

if (minMoves == 17)
printf("Impossible\n");
else
printf("%d\n", minMoves);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  URAL 1122 Game DFS