新农上路
- 积分
- 99
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2011-11-7
- 最后登录
- 1970-1-1
|
- class Grid(object):
- def __init__(self, grid):
- self._grid = grid
- self._m = len(grid)
- self._n = len(grid[0])
- def _get_children(self, i, j):
- res = {}
- for p in [-1, 0, 1]:
- for q in [-1, 0, 1]:
- if p == q == 0:
- continue
- ii = i + p
- jj = j + q
- if 0 <= ii < self._m and 0 <= jj < self._n:
- res[(ii, jj)] = self._grid[ii][jj]
- return res
- def find_path(self, word):
- self._visited = set()
- res = []
- for i in range(self._m):
- for j in range(self._n):
- self._results = []
- self._find_path_aux(0, word, [], i, j)
- res.extend(self._results[:])
- return res
- def _find_path_aux(self, idx, word, one_result, i, j):
- if idx == len(word) - 1:
- target = word[idx]
- if target == self._grid[i][j] and ((i, j) not in self._visited):
- self._results.append(one_result + [(i, j)])
- else:
- # 0 <= idx < len(word) - 1
- target = word[idx]
- if target == self._grid[i][j] and ((i, j) not in self._visited):
- self._visited.add((i, j))
- children = self._get_children(i, j)
- for key in children:
- ii = key[0]
- jj = key[1]
- self._find_path_aux(idx + 1, word, one_result + [(i, j)],
- ii, jj)
- self._visited.remove((i, j))
- else:
- return
复制代码
- # -*- coding: utf-8 -*-
- import unittest
- from solution import Grid
- class Test(unittest.TestCase):
- def test1(self):
- word = 'dog'
- grid = ['dogo', 'oodo', 'gogo', 'oooo']
- grid = ['dogo', 'xxxx', 'xxxx', 'xxxx']
- grid = [[y for y in x] for x in grid]
- s = Grid(grid)
- res = s.find_path(word)
- print res
- def test2(self):
- word = 'dog'
- grid = ['dogo', 'oodo', 'gogo', 'oooo']
- grid = [[y for y in x] for x in grid]
- s = Grid(grid)
- res = s.find_path(word)
- print res
- if __name__ == '__main__':
- unittest.main(verbosity=2)
复制代码
|
|