问题描述:
将n*n数字棋盘空缺位置补齐,使得所有数字按顺序经过所有格子并连成一条曲线,相邻两点之间可通过上下左右和对角线共8种方式连接。
比如下面是试题题面:
解决算法:
维护一个candidate集合,里面元素表示与当前题面上所存在数字相邻的数字。整体算法使用深度优先搜索,每次在candidate集合中取出一个元素,然后获取可放置位置,遍历有效位置进行递归求解。递归出口:candidate集合为空。
python代码:
class Matrix:
def __init__(self, grid):
self.n = len(grid)
self.grid = grid
self.visited = [[0 for j in range(self.n)] for i in range(self.n)]
self.number = {}
self.candi = set()
def build(self):
for i in range(self.n):
for j in range(self.n):
if self.grid[i][j]!=0:
self.number[self.grid[i][j]] = (i, j)
self.visited