#include <stdio.h> #include <stdlib.h> #define SIZE 9 int board[SIZE][SIZE]; int INF = 0x7FFFFFFF; int w[8][2] = { {1,2},{1,-2},{-1,2},{-1,-2}, {2,1},{2,-1},{-2,1},{-2,-1} }; int isInRange(int x, int y){ if((0 <= x && x < SIZE)&&(0 <= y && y < SIZE)){ return 1; }else{ return 0; } } void update(int cx, int cy, int tx, int ty){ if(board[tx][ty] != INF && board[cx][cy] > board[tx][ty] + 1){ board[cx][cy] = board[tx][ty] + 1; } } void print_board(){ int i,j; for(i=0; i < SIZE; i++){ for(j=0; j < SIZE; j++){ if(board[i][j] == INF){ }else{ } } } } void print_route(int X, int Y){ int i,j; int len = 1; int route[SIZE][SIZE]; for(i=0; i < SIZE; i++){ for(j=0; j <SIZE; j++){ route[i][j] = 0; } } route[X][Y] = len; while(1){ int minX, minY; int min = INF; for(i=0; i < 8; i++){ if(isInRange(X+w[i][0], Y+w[i][1])){ if(min > board[X+w[i][0]][Y+w[i][1]]){ minX = X + w[i][0]; minY = Y + w[i][1]; min = board[X+w[i][0]][Y+w[i][1]]; } } } // increse path walk length len++; X = minX; Y = minY; route[X][Y] = len; if(min == 0){ break; } }/*while*/ for(i=0; i < SIZE; i++){ for(j=0; j <SIZE; j++){ if(route[i][j] == 0){ }else{ } } } } int getScore(int startX, int startY, int endX, int endY){ int i,j,k; if(!isInRange(startX, startY)){ } if(!isInRange(endX, endY)){ } // initialize board for(i=0; i < SIZE; i++){ for(j=0; j < SIZE; j++){ board[i][j] = INF; } } // record minimum cost board[endX][endY] = 0; print_board(); while(1){ int i,j; for(i=0; i < SIZE; i++){ for(j=0; j < SIZE; j++){ for(k=0; k < 8; k++){ if(isInRange(i+w[k][0], j+w[k][1])){ update(i,j,i+w[k][0], j+w[k][1]); } } } } print_board(); if(board[startX][startY] != INF){ print_route(startX, startY); break; } }/*while*/ return board[startX][startY]; } int main(int argc, const char *argv[]) { int startX=1, startY=1; int endX=7, endY=5; getScore( startY,startX, endY,endX ); return 0; }
Standard input is empty
------- print board ------- INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, 0, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, ------- ----- ----- ------- ------- print board ------- INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, 1, INF, 1, INF, INF, INF, INF, 2, 1, 2, INF, 2, INF, INF, 3, 2, 3, 2, 3, 0, 3, 4, 3, 4, 3, 2, 1, 2, 3, 4, 5, 4, 3, 2, 3, 4, 1, 2, 1, 4, 3, 4, 3, 2, 3, 2, 3, 2, ------- ----- ----- ------- ------- print board ------- INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, INF, 2, INF, 2, INF, INF, INF, INF, 3, 2, 3, 2, 3, 2, INF, 4, 3, 2, 3, 4, 1, 2, 1, 4, 3, 4, 3, 2, 1, 2, 3, 2, 5, 4, 3, 2, 3, 2, 3, 0, 3, 4, 3, 4, 3, 2, 1, 2, 3, 2, 5, 4, 3, 2, 3, 4, 1, 2, 1, 4, 3, 4, 3, 2, 3, 2, 3, 2, ------- ----- ----- ------- ------- print board ------- INF, INF, 4, 3, 4, 3, 4, 3, 4, 5, 4, 3, 4, 3, 2, 3, 2, 3, 4, 3, 4, 3, 2, 3, 2, 3, 2, 5, 4, 3, 2, 3, 4, 1, 2, 1, 4, 3, 4, 3, 2, 1, 2, 3, 2, 5, 4, 3, 2, 3, 2, 3, 0, 3, 4, 3, 4, 3, 2, 1, 2, 3, 2, 5, 4, 3, 2, 3, 4, 1, 2, 1, 4, 3, 4, 3, 2, 3, 2, 3, 2, ------- ----- ----- ------- ----- find !! ----- ---- route ----- , , , , , , , , , , 1, , , , 3, , , , , , , 2, , , , , , , , , , , , 4, , , , , , , , , , , , , , , , , , , 5, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,