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);
}
}