#include #include #include #define ROWS 9 #define COLUMNS 9 bool map[ROWS][COLUMNS] = {0}; //int debug = 0; bool check_if_valid(int row, int column) { int sum, i; sum = 0; // would there be more than 2 cops on the road? for (i=0; i 1) { // if (debug == 1) // { // printf("ERROR: row #%d would have more than 2 cops!\n", row); // } return false; } sum = 0; for (i=0; i 1) { // if (debug == 1) // { // printf("ERROR: column #%d would have more than 2 cops!\n", column); // } return false; } sum = 0; // would cop be lonely? if (row == 0) // top { if (column == 0) // top left // will never get checked, as a cop is already at this position { sum = map[row][column+1] + map[row+1][column] + map[row+1][column+1]; } else if (column < COLUMNS-1) // top { sum = map[row][column-1] + map[row][column+1] + map[row+1][column-1] + map[row+1][column] + map[row+1][column+1]; } else if (column == COLUMNS-1) // top right { sum = map[row][column-1] + map[row+1][column-1] + map[row+1][column]; } } else if (row < ROWS-1) // middle rows { if (column == 0) // left { sum = map[row-1][column] + map[row-1][column+1] + map[row][column+1] + map[row+1][column] + map[row+1][column+1]; } else if (column < COLUMNS-1) // no border { sum = map[row-1][column-1] + map[row-1][column] + map[row-1][column+1] + map[row][column-1] + map[row][column+1] + map[row+1][column-1] + map[row+1][column] + map[row+1][column+1]; } else if (column == COLUMNS-1) // right { sum = map[row-1][column-1] + map[row-1][column] + map[row][column-1] + map[row+1][column-1] + map[row+1][column]; } } else if (row == ROWS-1) // bottom { if (column == 0) // bottom left { sum = map[row-1][column] + map[row-1][column+1] + map[row][column+1] ; } else if (column < COLUMNS-1) // bottom { sum = map[row-1][column-1] + map[row-1][column] + map[row-1][column+1] + map[row][column-1] + map[row][column+1] ; } else if (column == COLUMNS-1) // bottom right { sum = map[row-1][column-1] + map[row-1][column] + map[row][column-1] ; } } if (sum != 0) { // if (debug == 1) // { // printf("ERROR: cop in row #%d, column #%d would not be lonely!\n", row, column); // } return false; } return true; } bool check_for_success(void) { int i,j , index_of_first_cop , index_of_second_cop , sum_of_streets_with_4_vacant_crossings = 0; // printf("CHECKING FOR SUCCESS...\n"); // check horizontal streets for (j=0; j 3) { return false; } } } // check vertical streets for (i=0; i 3) { return false; } } } if (sum_of_streets_with_4_vacant_crossings != 3) { return false; } return true; } void print_map(void) { int i,j; printf("\n"); for (i=0; i 1) // { // debug = 1; // } // hardcoded cops map[0][0] = 1; map[4][3] = 1; try(0,1); return 0; }