leetcode每日一题—909.蛇梯棋

461 篇文章 1 订阅

题目:
N x N 的棋盘 board 上,按从 1 到 N*N 的数字给方格编号,编号 从左下角开始,每一行交替方向。

例如,一块 6 x 6 大小的棋盘,编号如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解答:

class Solution:
    def snakesAndLadders(self, board: List[List[int]]) -> int:
        n = len(board)
        
        #将编号转换为对应的行列:
        def id2rc(id):
            r,c=(id-1)//n,(id-1)%n
            if r%2==1:
                c=n-1-c
            return n-1-r,c

        #BFS遍历搜索
        visited={1}
        q=deque([(1,0)])
        while q:
            cur,step=q.popleft()
            for i in range(1,7):
                cn=cur+i
                if cn>n*n:
                    break
                r,c=id2rc(cn)
                if board[r][c]!=-1:
                    cn=board[r][c]
                if cn==n*n:
                    return step+1
                if cn not in visited:
                    q.append((cn,step+1))
                    visited.add(cn)
        return -1
        
                  
        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值