-
Knights Tour problem
I am trying to make a knights tour program. I was going to use stacks, but decided to just use an object array. The problem I have is when it backtracks, it doesnt always continue in the direction it left off from. here is my code:
(Vars is a class with variables x, y, and d) d is direction
my demo is simply:
Code:
KnightsTour5 knight=new KnightsTour5(1,1,size);
knight.GO();
the rest:
import java.util.Stack;
public class KnightsTour5 {
Vars locs[]=new Vars[0];
private int size, max=1, d=0, board[][];
Code:
public KnightsTour(int x,int y, int newSize)
{
size=newSize;
locs=new Vars[size*size+1];
for(int n=1;n<=size*size;n++)
{
locs[n]=new Vars();
}
board=new int[size+1][size+1];
for(int n=1;n<=size;n++)
{
for(int n2=1;n2<=size;n2++)
{
board[n][n2]=0;
}
}
locs[max].x=x;
locs[max].y=y;
locs[max].d=0;
board[x][y]=max;
}
public void GO()
{
int n=0;
while(n<250)
{
n++;
d++;
if(d>8)
{
board[locs[max].x][locs[max].y]=0;
locs[max].d=0;
max--;
d=locs[max].d+1;
}
move();
}
}
public void move()
{
int x=locs[max].x, y=locs[max].y;
switch(d)
{
case 1:x--;y-=2;System.out.print("a");break;
case 2:x++;y-=2;System.out.print("b");break;
case 3:x+=2;y--;System.out.print("c");break;
case 4:x+=2;y++;System.out.print("d");break;
case 5:x++;y+=2;System.out.print("e");break;
case 6:x--;y+=2;System.out.print("f");break;
case 7:x-=2;y++;System.out.print("g");break;
case 8:x-=2;y--;System.out.print("h");break;
}
System.out.println(" X: "+x+" Y: "+y+" |"+(max+1));
if((x<1)||(x>size)||(y<1)||(y>size)){}
else if(board[x][y]!=0){}
else
{
max++;
locs[max].x=x;
locs[max].y=y;
locs[max].d=d;
board[x][y]=max;
d=0;
printBoard();
}
}
public void printBoard()
{
for(int n=1;n<=size;n++)
{
for(int n2=1;n2<=size;n2++)
{
if(board[n2][n]<10)
System.out.print(board[n2][n]+" ");
else
System.out.print(board[n2][n]+" ");
}
System.out.println();
}
System.out.println();
}
}
-
Your search algorithm goes from eleven o'clock clockwise through ten o'clock independent of location in the grid. Here's an idea that you might be able to implement: An Extremely Simple Solution.