问题描述:将马随机放在国际象棋的 848 棋盘 Bord[8 118]的某个方格中,马按走棋规 则进行移动。要求每个方格上只进入一次,走遍棋盘上全部64 个方格。编制非递归程序, 求出马的行走路线,并按求出的行走路线,将数宇1,2…,64 依次填入8#0;众8+ 8的方 阵,输出之
时间: 2024-03-09 18:50:25 浏览: 17
以下是 Python 代码实现:
```python
# 初始化棋盘
board = [[0 for x in range(8)] for y in range(8)]
# 马走的8个方向
dx = [1, 2, 2, 1, -1, -2, -2, -1]
dy = [2, 1, -1, -2, -2, -1, 1, 2]
# 判断一个位置是否在棋盘内
def is_valid(x, y):
if x < 0 or x >= 8 or y < 0 or y >= 8:
return False
return True
# 非递归方式实现马踏棋盘
def knight_tour(board, start_x, start_y):
stack = [(start_x, start_y)]
board[start_x][start_y] = 1
pos = 2
while stack:
(x, y) = stack[-1]
reached = False
for i in range(8):
new_x = x + dx[i]
new_y = y + dy[i]
if is_valid(new_x, new_y) and board[new_x][new_y] == 0:
stack.append((new_x, new_y))
board[new_x][new_y] = pos
pos += 1
reached = True
break
if not reached:
board[x][y] = 0
stack.pop()
pos -= 1
return board
# 输出结果
board = knight_tour(board, 0, 0)
for i in range(8):
for j in range(8):
print("%2d" % board[i][j], end=" ")
print()
```
以上代码中,我们首先定义了一个 8x8 的二维数组 `board`,用于表示棋盘,初始值都为 0。然后定义了马走的8个方向的坐标变化数组 `dx` 和 `dy`。接着实现了一个 `is_valid` 函数,用于判断一个位置是否在棋盘内。最后使用非递归方式实现了马踏棋盘算法,将遍历过的位置标记为已访问,并使用栈来记录当前的位置。
最后输出遍历结果,即完成马踏棋盘的行走路线,并按求出的行走路线,将数宇1,2…,64 依次填入8x8的方阵中,并输出。