zoukankan      html  css  js  c++  java
  • 1751.牛郎织女

    牛郎织女 · Cowherd&Weaver

    描述

    又到了七夕节,牛郎织女相约一起去一个n*m大小的迷宫maze里玩耍。然而没过多久,他们就倒霉地走散了。现在给定由.,*,S,T组成的矩阵maze,其中.表示空地,*表示障碍物,S表示牛郎的位置 ,T表示织女的位置,牛郎和织女都会试图寻找对方,不停地在矩阵中走动(他们可以每次向上下左右四个方向移动一格或者站着不动,但是不能走到迷宫外面或者障碍物),请问他们是否有可能重逢?如果有可能,返回True,否则返回False

    2<=`n,m`<=1000

    样例

    样例1:

    输入: 
    [
    "S..*",
    "*.**",
    "...T"
    ]
    输出: true
    说明:
    织女选择不动
    牛郎行动路线(0,0)->(0,1)->(1,1)->(2,1)->(2,2)->(2,3)
    

    样例2:

    输入:
    [
    "S..*",
    "***.",
    "...T"
    ]
    输出: false
    说明:
    这两个人无论如何和碰不上了

    BFS写法
    #牛郎织女
    class Solution:
        def function(self, maze):
            n, m = len(maze), len(maze[0])
            
            for i in range(n):
                for j in range(m):
                    if (maze[i][j] == 'S'):
                        return self.bfs([[i, j]], maze)
    
        
        #bfs,看是否可以流过去
        def bfs(self, queue, maze):
            directions = [[0, 1], [0, -1], [-1, 0], [1, 0]]
            visted = []
    
            while queue:
                pop_num = queue.pop(0)
                pop_x = pop_num[0]
                pop_y = pop_num[1]
    
                visted.append([pop_x, pop_y])
    
                
                #边界情况
                for direction in directions:
                    new_x = pop_x + direction[0]
                    new_y = pop_y + direction[1]
    
                    if (new_x < 0 or new_x >= len(maze) or new_y < 0 or new_y >= len(maze[0])):
                        continue
                                        
                    if (maze[new_x][new_y] == 'T'):
                        return True 
                        
                    if (maze[new_x][new_y] == '.') and [new_x, new_y] not in visted:
                        queue.append([new_x, new_y])
                        
            return False
    
    result = Solution().function([
    "S..*",
    "***.",
    "...T"
    ])
    print(result)
                    
     
  • 相关阅读:
    Shiro理解与总结
    spark教程(14)-共享变量
    Hive 教程(十)-UDF
    multivariate_normal 多元正态分布
    windows 安装 python 踩坑记录
    EM 算法(三)-GMM
    EM 算法(二)-KMeans
    EM 算法(一)-原理
    sklearn-GDBT
    集成学习-Boosting 模型深度串讲
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13510360.html
Copyright © 2011-2022 走看看