I Made Krisna's Times My Way to Write the Times

22May/100

Knight’s Tour C Source Code

Knight's Tour is recursive and backtrackting algorithm that use brute force to find the solving.

#include "stdio.h"
#include "conio.h"

void printBoard(int**, int);
void clearBoard(int**, int);
void traceKnight(int**, int, int, int, int, int*);

int main(){
    int matrix;
    printf("Input Box Size : ");
    scanf("%d", &matrix);

    /* Board Matrix Building */
    int** board;
    board = (int**) malloc (sizeof(int)* matrix);
    for (int i = 0; i < matrix; i++)
    {
        board[i] = (int*) malloc (sizeof(int)* matrix);
    }

    /* Board Clearing Step */
    clearBoard(board, matrix);

    /* Knight Tracing Step */
    int checker = 0;
    traceKnight(board, matrix, 1, 0, 0, &checker);

    /* Printing the Result */
    printBoard(board,matrix);

    getch();
    return 0;
}

Main recursive function that trace and make the combination step of Knight

void traceKnight(int** board, int matrix, int step, int y, int x, int* checker)
{
    /* Step overboard */
    if (y < 0 || y > matrix-1 || x < 0 || x > matrix - 1)
    {
       return;
    }

    /* Board position has been taken */
    if (board[y][x] != 0)
    {
       return;
    }

    /* Take a step */
    board[y][x] = step;
    *checker = step;

    /* Choosing next step */
    traceKnight(board, matrix, step + 1, y - 2, x - 1, checker);
    traceKnight(board, matrix, step + 1, y - 2, x + 1, checker);
    traceKnight(board, matrix, step + 1, y - 1, x + 2, checker);
    traceKnight(board, matrix, step + 1, y + 1, x + 2, checker);
    traceKnight(board, matrix, step + 1, y + 2, x + 1, checker);
    traceKnight(board, matrix, step + 1, y + 2, x - 1, checker);
    traceKnight(board, matrix, step + 1, y + 1, x - 2, checker);
    traceKnight(board, matrix, step + 1, y - 1, x - 2, checker);

    /* Backtracking Step */
    if (*checker < matrix * matrix)
    {
       board[y][x] = 0;
    }
}
void clearBoard(int** board, int index)
{
    for (int y = 0; y < index; y++)
    {
        for (int x = 0; x < index; x++)
        {
              board[y][x] = 0;
        }
    }
}
void printBoard(int** board, int index)
{
    for (int y = 0; y < index; y++)
    {
        for (int x = 0; x < index; x++)
        {
              printf("%4d", board[y][x]);
        }
        printf("\n");
    }
}

Related posts:

  1. Greedy Activity Selector C Source Code
  2. Tower of Hanoi C Source Code
  3. Draw a “stdio” BL Right-Angled Triangle C Source Code
  4. Draw a “stdio” Square Shape C Source Code
  5. Matrix-Vector Multiplication MPI C Source Code
Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

(required)

No trackbacks yet.