R
=
5
C
=
5
direction
=
[
'east'
,
'west'
,
'north'
,
'south'
]
def
turnright(c_direction):
if
c_direction
=
=
'east'
:
return
'south'
elif
c_direction
=
=
'west'
:
return
'north'
elif
c_direction
=
=
'north'
:
return
'east'
else
:
return
'west'
def
next
(i, j, c_direction):
if
c_direction
=
=
'east'
:
j
+
=
1
elif
c_direction
=
=
'west'
:
j
-
=
1
;
elif
c_direction
=
=
'north'
:
i
-
=
1
else
:
i
+
=
1
return
(i, j)
def
isvalid(i, j):
if
(i < R
and
i >
=
0
and
j >
=
0
and
j < C):
return
True
return
False
def
alreadyVisited(i, j, mini, minj, maxi, maxj):
if
(i >
=
mini
and
i <
=
maxi
and
j >
=
minj
and
j <
=
maxj):
return
False
return
True
def
ConstraintWalls(mini, minj, maxi, maxj, c_direction):
if
c_direction
=
=
'east'
:
mini
+
=
1
elif
c_direction
=
=
'west'
:
maxi
-
=
1
elif
c_direction
=
=
'north'
:
minj
+
=
1
else
:
maxj
-
=
1
return
mini, minj, maxi, maxj
def
printspiral( arr):
count
=
0
current_direction
=
'east'
mini
=
0
; minj
=
0
; maxi
=
R
-
1
; maxj
=
C
-
1
i
=
0
; j
=
0
while
(count < (R
*
C)):
print
(arr[i][j],end
=
" "
)
count
+
=
1
p
=
next
(i, j, current_direction)
if
(
not
isvalid(p[
0
], p[
1
])
or
alreadyVisited(p[
0
], p[
1
], mini, minj, maxi, maxj)):
if
(
not
alreadyVisited(i, j, mini, minj, maxi, maxj)):
mini, minj, maxi, maxj
=
ConstraintWalls(mini, minj, maxi, maxj, current_direction)
current_direction
=
turnright(current_direction)
p
=
next
(i, j, current_direction)
i
=
p[
0
]
j
=
p[
1
]
if
__name__
=
=
'__main__'
:
arr
=
[[
0
for
j
in
range
(C)]
for
i
in
range
(R)]
counter
=
1
for
i
in
range
(R):
for
j
in
range
(C):
arr[i][j]
=
counter
counter
+
=
1
printspiral(arr)
print
()