-
Notifications
You must be signed in to change notification settings - Fork 1
/
simple_hill_climbing.py
89 lines (82 loc) · 3.29 KB
/
simple_hill_climbing.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import random
def SimpleHillClimb(matrix, start, M, N) :
current_state = start
print("Path :")
while 1 :
pos = (current_state[0] - 1, current_state[1])
if (pos[0] >= 0) :
if matrix[pos[0]][pos[1]] > matrix[current_state[0]][current_state[1]] :
current_state = pos
print(current_state)
continue
pos = (current_state[0] - 1, current_state[1] - 1)
if (pos[0] >= 0 and pos[1] >= 0) :
if matrix[pos[0]][pos[1]] > matrix[current_state[0]][current_state[1]] :
current_state = pos
print(current_state)
continue
pos = (current_state[0], current_state[1] - 1)
if (pos[1] >= 0) :
if matrix[pos[0]][pos[1]] > matrix[current_state[0]][current_state[1]] :
current_state = pos
print(current_state)
continue
pos = (current_state[0] + 1, current_state[1] - 1)
if (pos[0] < M and pos[1] >= 0) :
if matrix[pos[0]][pos[1]] > matrix[current_state[0]][current_state[1]] :
current_state = pos
print(current_state)
continue
pos = (current_state[0] + 1, current_state[1])
if (pos[0] < M) :
if matrix[pos[0]][pos[1]] > matrix[current_state[0]][current_state[1]] :
current_state = pos
print(current_state)
continue
pos = (current_state[0] + 1, current_state[1] + 1)
if (pos[0] < M and pos[1] < N) :
if matrix[pos[0]][pos[1]] > matrix[current_state[0]][current_state[1]] :
current_state = pos
print(current_state)
continue
pos = (current_state[0], current_state[1] + 1)
if (pos[1] < N) :
if matrix[pos[0]][pos[1]] > matrix[current_state[0]][current_state[1]] :
current_state = pos
print(current_state)
continue
pos = (current_state[0] - 1, current_state[1] + 1)
if (pos[0] >= 0 and pos[1] < N) :
if matrix[pos[0]][pos[1]] > matrix[current_state[0]][current_state[1]] :
current_state = pos
print(current_state)
continue
break
print("Final Position is : ", current_state, sep=' ')
return
M = 5 #No of rows
N = 8 #No of columns
elevation_matrix = []
for i in range(0, M) :
elevation_matrix.append([random.randint(1,9) for x in range(0,N)])# for j in range(0,5)]
for i in range(0, M) :
print(elevation_matrix[i])
print("Enter the position in the range (%d, %d):" %(M-1, N-1))
position = tuple(map(int, input().split()))
if position[0] >= M or position[1] >= N :
exit("Enter a valid position!!!")
'''
elevation_matrix = []
elevation_matrix.append([1,6,3,3,4,7,5,5])
elevation_matrix.append([4,5,1,6,7,6,2,9])
elevation_matrix.append([7,3,1,2,1,8,1,9])
elevation_matrix.append([1,4,5,1,8,5,1,4])
elevation_matrix.append([2,5,4,4,7,8,2,8])
for i in range(0, M) :
print(elevation_matrix[i])
print("Enter the position in the range (%d, %d):" %(M-1, N-1))
position = tuple(map(int, input().split()))
if position[0] >= M or position[1] >= N :
exit("Enter a valid position!!!")
'''
SimpleHillClimb(elevation_matrix, position, M, N)