This Java Program is to Implement Knight’s Tour Problem.A knight’s tour is a sequence of moves of a knight on a chessboard such that the knight visits every square exactly once. If the knight ends on a square that is one knight’s move from the beginning square (so that it could tour the board again immediately, following the same path), the tour is closed, otherwise it is open. The exact number of open tours on an 8×8 chessboard is still unknown.
Here is the source code of the Java Program to Implement Knight’s Tour Problem. The Java program is successfully compiled and run on a Linux system. The program output is also shown below.
package com.vipin.algorithms;
public class KnightTour
{
private static final int N = 8;
private int soln[][];
public KnightTour()
{
soln = new int[N][N];
}
private boolean isSafe(int x, int y)
{
if (x >= 0 && x < N && y >= 0 && y < N && soln[x][y] == -1)
return true;
return false;
}
private void printSolution()
{
for (int x = 0; x < N; x++)
{
for (int y = 0; y < N; y++)
{
System.out.print(" " + soln[x][y]);
}
System.out.println();
}
}
private boolean solveKTUtil(int x, int y, int movei, int xMove[],int yMove[])
{
int k, next_x, next_y;
if (movei == N * N)
return true;
for (k = 0; k < N; k++)
{
next_x = x + xMove[k];
next_y = y + yMove[k];
if (isSafe(next_x, next_y))
{
soln[next_x][next_y] = movei;
if (solveKTUtil(next_x, next_y, movei + 1, xMove, yMove))
return true;
else
soln[next_x][next_y] = -1;
}
}
return false;
}
public boolean solveKnightTour()
{
for (int x = 0; x < N; x++)
{
for (int y = 0; y < N; y++)
{
soln[x][y] = -1;
}
}
int xMove[] = { 2, 1, -1, -2, -2, -1, 1, 2 };
int yMove[] = { 1, 2, 2, 1, -1, -2, -2, -1 };
soln[0][0] = 0;
if (!solveKTUtil(0, 0, 1, xMove, yMove))
{
System.out.println("the solution does not exist");
return false;
}
else
{
printSolution();
}
return true;
}
public static void main(String... arg)
{
KnightTour knightTour = new KnightTour();
System.out.println("the solution is");
knightTour.solveKnightTour();
}
}
$javac KnightTour.java $java KnightTour the solution is 0 59 38 33 30 17 8 63 37 34 31 60 9 62 29 16 58 1 36 39 32 27 18 7 35 48 41 26 61 10 15 28 42 57 2 49 40 23 6 19 47 50 45 54 25 20 11 14 56 43 52 3 22 13 24 5 51 46 55 44 53 4 21 12
Related posts:
Java Program to Generate a Random UnDirected Graph for a Given Number of Edges
Implementing a Runnable vs Extending a Thread
wait() and notify() Methods in Java
Comparing Objects in Java
Map to String Conversion in Java
A Guide to the finalize Method in Java
Debug a JavaMail Program
Runnable vs. Callable in Java
Introduction to Spring Security Expressions
Introduction to Spring MVC HandlerInterceptor
Java 8 and Infinite Streams
Java Program to Implement Hash Trie
Limiting Query Results with JPA and Spring Data JPA
StringBuilder vs StringBuffer in Java
Generic Constructors in Java
Java Program to Generate All Subsets of a Given Set in the Gray Code Order
Spring Boot Tutorial – Bootstrap a Simple Application
Java InputStream to Byte Array and ByteBuffer
Recommended Package Structure of a Spring Boot Project
Java Program to Check Whether a Weak Link i.e. Articulation Vertex Exists in a Graph
Java – Get Random Item/Element From a List
Spring Boot - Admin Server
Introduction to the Java NIO2 File API
Hướng dẫn Java Design Pattern – Template Method
Java Program to Find the Vertex Connectivity of a Graph
Java Program to Implement Queue using Two Stacks
Build a REST API with Spring and Java Config
Java Program to Implement Hash Tables with Linear Probing
Guide to Java 8 groupingBy Collector
Feign – Tạo ứng dụng Java RESTful Client
Java Program to Find MST (Minimum Spanning Tree) using Kruskal’s Algorithm
Validate email address exists or not by Java Code