#include <stdio.h> const int size = 8; // размер доски int table[size*size]; // соственно сама доска int point[2] = {0,1}, // точка, куда должен попасть конь knightPos[2] = {4,2}, // начальная позиция коня moves = 0; // сколько шагов нужно void initTable(int* table, int size, int p[2]); // сначала таблица "не хожена", кроме точки void movesKnight(int* table, int size); // сделать ходы из всех "хоженных" точек int checkPass(int* table, int size, int kP[2]); // проверить, если путь пройден void showBoard(int* table, int size); // показать доску int main() { initTable(table, size, point); do { movesKnight(table, size); } while(checkPass(table, size, knightPos) == -1); showBoard(table, size); printf("\nresult = %d", moves); return 0; } void initTable(int* table, int size, int p[2]) { int i, j; for(i = 0; i < size; i++) { for(j = 0; j < size; j++) { table[i*size + j] = -1; } } table[p[0]*size + p[1]] = 0; } void movesKnight(int* table, int size) { int i, j; for(i = 0; i < size; i++) { for(j = 0; j < size; j++) { if(table[i*size + j] == moves) { if(i+1 < 8 && j+2 < 8 && table[(i+1)*size + (j+2)] == -1) { table[(i+1)*size + (j+2)] = moves+1; } if(i+2 < 8 && j+1 < 8 && table[(i+2)*size + (j+1)] == -1) { table[(i+2)*size + (j+1)] = moves+1; } if(i+1 < 8 && j-2 >= 0 && table[(i+1)*size + (j-2)] == -1) { table[(i+1)*size + (j-2)] = moves+1; } if(i-1 >= 0 && j+2 < 8 && table[(i-1)*size + (j+2)] == -1) { table[(i-1)*size + (j+2)] = moves+1; } if(i+2 < 8 && j-1 >= 0 && table[(i+2)*size + (j-1)] == -1) { table[(i+2)*size + (j-1)] = moves+1; } if(i-1 >= 0 && j-2 >=0 && table[(i-1)*size + (j-2)] == -1) { table[(i-1)*size + (j-2)] = moves+1; } if(i-2 >= 0 && j+1 < 8 && table[(i-2)*size + (j+1)] == -1) { table[(i-2)*size + (j+1)] = moves+1; } if(i-2 >= 0 && j-1 >= 0 && table[(i-2)*size + (j-1)] == -1) { table[(i-2)*size + (j-1)] = moves+1; } } } } moves++; } int checkPass(int* table, int size, int kP[2]) { return table[kP[0]*size + kP[1]]; } void showBoard(int* table, int size) { int i, j; for(i = 0; i < size; i++) { for(j = 0; j < size; j++) { printf("%3d", table[i*size + j]); } printf("\n"); } } |