I am trying to implement knight tour using iteration method. I have already wrote a program using recursion and its working fine, now instead of recursion I am using iteration method with stack to implement knight tour, I have wrote the below code. and here I can not backtrack when I reached to a dead end, could you please check my code and give me some solution.
JavaScript
x
104
104
1
class knightTour:
2
def __init__(self,size):
3
self.size = size
4
self.board = [[0 for x in range(self.size)] for y in range(self.size)]
5
def is_valid_move(self,row ,col):
6
if (row<0 or row>self.size-1 or col<0 or col>self.size-1 or self.board[row][col]!=0):
7
return False
8
return True
9
10
def display(self):
11
print
12
for x in range(self.size):
13
for y in range(self.size):
14
print self.board[x][y],
15
print
16
print
17
18
def solve(self,row,col,count,stack):
19
self.board[row][col] = count
20
count +=1
21
stack.push(row)
22
stack.push(col)
23
24
while count < self.size*self.size:
25
26
if (self.is_valid_move(row+2,col+1)):
27
row+=2
28
col+=1
29
self.board[row][col] = count
30
count+=1
31
stack.push(row)
32
stack.push(col)
33
34
elif (self.is_valid_move(row+1,col+2)):
35
row+=1
36
col+=2
37
self.board[row][col] = count
38
count+=1
39
stack.push(row)
40
stack.push(col)
41
42
elif (self.is_valid_move(row-1,col+2)):
43
row-=1
44
col+=2
45
self.board[row][col] = count
46
count+=1
47
stack.push(row)
48
stack.push(col)
49
50
elif (self.is_valid_move(row-2,col+1)):
51
row-=2
52
col+=1
53
self.board[row][col] = count
54
count+=1
55
stack.push(row)
56
stack.push(col)
57
58
elif (self.is_valid_move(row-2,col-1)):
59
row-=2
60
col-=1
61
self.board[row][col] = count
62
count+=1
63
stack.push(row)
64
stack.push(col)
65
66
elif (self.is_valid_move(row-1,col-2)):
67
row-=1
68
col-=2
69
self.board[row][col] = count
70
count+=1
71
stack.push(row)
72
stack.push(col)
73
74
elif (self.is_valid_move(row+1,col-2)):
75
row+=1
76
col-=2
77
self.board[row][col] = count
78
count+=1
79
stack.push(row)
80
stack.push(col)
81
82
elif (self.is_valid_move(row+2,col-1)):
83
row+=2
84
col-=1
85
self.board[row][col] = count
86
count+=1
87
stack.push(row)
88
stack.push(col)
89
90
else:
91
# " Backtrack " // how to do backtracking here ?
92
self.board[row][col] = 0
93
count-=1
94
stack.pop()
95
stack.pop()
96
col = stack.pop()
97
row = stack.pop()
98
stack.push(row)
99
stack.push(col)
100
stack = stack()
101
d = knightTour(8)
102
d.solve(0,0,1,stack)
103
d.display()
104
Advertisement
Answer
JavaScript
1
100
100
1
def solve(self,row,col,count,stack):
2
self.board[row][col] = count
3
count +=1
4
stack.append(row)
5
stack.append(col)
6
org=0
7
origin=[]
8
while count < self.size*self.size:
9
10
if (self.is_valid_move(row+2,col+1) and org<1):
11
row+=2
12
col+=1
13
self.board[row][col] = count
14
count+=1
15
stack.append(row)
16
stack.append(col)
17
origin.append(1) //Origin to get hold values which will be used in iteration
18
org=0 //Helps in backtracking
19
20
elif (self.is_valid_move(row+1,col+2) and org<2): //Checks if the org is less than 2
21
row+=1
22
col+=2
23
self.board[row][col] = count
24
count+=1
25
stack.append(row)
26
stack.append(col)
27
origin.append(2)
28
org=0
29
30
elif (self.is_valid_move(row-1,col+2) and org<3):
31
row-=1
32
col+=2
33
self.board[row][col] = count
34
count+=1
35
stack.append(row)
36
stack.append(col)
37
origin.append(3)
38
org=0
39
40
elif (self.is_valid_move(row-2,col+1) and org<4):
41
row-=2
42
col+=1
43
self.board[row][col] = count
44
count+=1
45
stack.append(row)
46
stack.append(col)
47
origin.append(4)
48
org=0
49
50
elif (self.is_valid_move(row-2,col-1) and org<5):
51
row-=2
52
col-=1
53
self.board[row][col] = count
54
count+=1
55
stack.append(row)
56
stack.append(col)
57
origin.append(5)
58
org=0
59
60
elif (self.is_valid_move(row-1,col-2) and org<6):
61
row-=1
62
col-=2
63
self.board[row][col] = count
64
count+=1
65
stack.append(row)
66
stack.append(col)
67
origin.append(6)
68
org=0
69
70
elif (self.is_valid_move(row+1,col-2) and org<7):
71
row+=1
72
col-=2
73
self.board[row][col] = count
74
count+=1
75
stack.append(row)
76
stack.append(col)
77
origin.append(7)
78
org=0
79
80
elif (self.is_valid_move(row+2,col-1) and org<8):
81
row+=2
82
col-=1
83
self.board[row][col] = count
84
count+=1
85
stack.append(row)
86
stack.append(col)
87
origin.append(8)
88
org=0
89
90
else:
91
self.board[row][col] = 0
92
count-=1
93
stack.pop()
94
stack.pop()
95
col = stack.pop()
96
row = stack.pop()
97
stack.append(row)
98
stack.append(col)
99
org=origin.pop()
100
This is a toughie. I checked for 5*5 board and 6*6 please check for 7 and 8