python -- 矩阵中的路径问题

30 篇文章 0 订阅
22 篇文章 1 订阅
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# fileName : matrix_path.py
# author : zoujiameng@aliyun.com.cn

class MatrixPath():
    def printMatrix(self, matrix, rows, cols, direction):
        if direction:
            print("---" + direction)
        for i in range(rows):
            for j in range(cols):
                print(matrix[cols*i+j], end=' ')
            print()

    def hasPath(self, matrix, rows, cols, path):
        # print("rows = %d, cols = %d" % (rows, cols))
        for i in range(rows):
            for j in range(cols):
                if matrix[i*cols+j] == path[0]: # 找到起始点
                    #tmp = matrix[i*cols+j]
                    #matrix[i*cols+j]='*'
                    if self.findPath(list(matrix), rows, cols, path[1:], i, j):
                        return True
                    #else:
                    #    matrix[i*cols+j] = tmp
        return False

    def findPath(self, matrix, rows, cols, path, x, y):
        if not path: # 找完了?
            return True
        # 将当前位置标记为已走过
        matrix[x*cols+y]='*'
        if y+1 < cols and matrix[x*cols+y+1] == path[0]: # 比较东边
            self.printMatrix(matrix, rows, cols, "向东走")
            return self.findPath(matrix, rows, cols, path[1:], x, y+1)
        elif y-1 >= 0 and matrix[x*cols+y-1] == path[0]: # 比较西边
            self.printMatrix(matrix, rows, cols, "向西走")
            return self.findPath(matrix, rows, cols, path[1:], x, y-1)
        elif x+1 < rows and matrix[(x+1)*cols+y] == path[0]: # 比较南边
            self.printMatrix(matrix, rows, cols, "向南走")
            return self.findPath(matrix, rows, cols, path[1:], x+1, y)
        elif x-1 >= 0 and matrix[(x-1)*cols+y] == path[0]: # 比较北边
            self.printMatrix(matrix, rows, cols, "向北走")
            return self.findPath(matrix, rows, cols, path[1:], x-1, y)
        else:
            return False

if __name__ == "__main__":
    # 调用测试
    _matrix = 'abcesfcsadee'
    _path = 'see'
#    _path = 'bcced'
    path = MatrixPath()
    path.printMatrix(_matrix, 3, 4, None)
    print(path.hasPath(list(_matrix), 3, 4, _path))


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值