Homework Assignment 5-Appendix B
Tomohiro Oda



#include <stdio.h>
int board[100];

int attempts, remainings;



int findCorner()

{

int i;

for (i = 0; i < 89; i++)

if (board[i] & board[i+1] & board[i+10] & !board[i+11]) return i+11;

printBoard(0); printf("Could not find a corner\n");

return 0;

}



int printBoard(int index)

{

int x, y;

for (y = 0; y < 10; y++) {

for (x = 0; x < 10; x++) {

if (y10+x == index)
printf(" X ");
else

printf("%2d ", board[y10+x]);
}
printf("\n");

}

printf("apptempts: %d\n\n", attempts);

}



int tryH(int index)

{

if (board[index+1]) return 0;

board[index] = board[index+1] = remainings–;

if (step()) return 1;

board[index] = board[index+1] = 0;

remainings++;

return 0;

}

int tryV(int index)

{

if (board[index+10]) return 0;

board[index] = board[index+10] = remainings–;

if (step()) return 1;

board[index] = board[index+10] = 0;

remainings++;

return 0;

}



int step()

{

int index;

if (!remainings) return 1;

index = findCorner();

if (!index) return 0;

if(board[index+1] & board[index+10]) {

attempts++;

return 0;

}

if (tryH(index)) return 1;

if (tryV(index)) return 1;

return 0;

}



int main()

{

int i;

for (i = 0; i < 100; i++) board[i] = 0;

for (i = 0; i < 10; i++) board[i] = -1;

for (i = 90; i < 100; i++) board[i] = -1;

for (i = 0; i < 100; i += 10) board[i] = -1;

for (i = 9; i < 100; i += 10) board[i] = -1;

board[11] = board[88] = -1;

printBoard(0);

attempts = 0;

remainings = 31;

if (step()) {

printBoard(0);

printf("———————–\nsucceeded!\n");

} else {

printf("——————–\nno solution in %d attempts\n", at\
tempts);

}

}