Leetcode 1730. Shortest Path to Get Food [Python]

典型的BFS题目。

class Solution:
    def getFood(self, grid: List[List[str]]) -> int:
        Row = len(grid)
        Col = len(grid[0])
        initx = inity = -1
        for i in range(Row):
            for j in range(Col):
                if grid[i][j] == "*":
                    initx = i
                    inity = j
        dirt = [(1,0),(0,1),(-1,0),(0,-1)]
        que = collections.deque()
        que.append((initx, inity))
        step = 1
        seen = set()
        seen.add((initx,inity))
        while que:
            size = len(que)
            #print(que)
            for _ in range(size):
                x,y = que.popleft()
                
                for dx,dy in dirt:
                    newx = x + dx
                    newy = y + dy
                    if 0 <= newx < Row and 0 <= newy < Col and (newx, newy) not in seen:
                        if grid[newx][newy] == '#':
                            return step
                        elif grid[newx][newy] == 'O':
                            que.append((newx, newy))
                            seen.add((newx,newy))
                        elif grid[newx][newy] == 'X':
                            seen.add((newx,newy))                          
            step += 1
        return -1
                
            
        
        
                    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值