zoukankan      html  css  js  c++  java
  • 130被围绕的区域

    from typing import List
    # 这道题的思路是从矩阵的四周开始寻找,如果这个字符为O,就向上下左右递归,
    # 先将找到的O转化为其他字符,最后将没有找到的O转化为X,将找到的O不变
    class Solution:
    def solve(self, board: List[List[str]]) -> None:
    # 如果列表为空或者列表中为空,返回空
    if not board or not board[0] :return
    # 定义行和列
    row,col = len(board),len(board[0])
    # 定义递归函数
    def dfs(index1, index2):
    # 首先将进来的转化为其他字符
    board[index1][index2] = "B"
    # 然后上下左右递归
    for x, y in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
    # 注意这里不能直接在index1上边相加减
    i = index1 + x
    j = index2 + y
    # 注意这里一定是从1开始的,否则就是错误的。
    if 1 <= i < row and 1 <= j < col and board[i][j] == "O":
    dfs(i,j)
    # 寻找第一列和最后一列
    for i in range(row):
    if board[i][0] == "O":
    dfs(i,0)
    if board[i][col - 1] == "O":
    dfs(i,col - 1)
    # 寻找第一行和最后一行
    for i in range(col):
    if board[0][i] == "O":
    dfs(0,i)
    if board[row - 1][i] == "O":
    dfs(row - 1,i)
    # 将字符恢复原位。
    for i in range(row):
    for j in range(col):
    if board[i][j] == "O":
    board[i][j] = "X"
    if board[i][j] == "B":
    board[i][j] = "O"


    A = Solution()
    A.solve([["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]])




  • 相关阅读:
    [NoiPlus2016]换教室
    [HNOI2013]游走
    [Noi2002]Savage
    [SDOI2010]古代猪文
    [JSOI2008]最小生成树计数
    [SCOI2010] 连续攻击游戏
    文艺平衡树
    指针FHQTreap
    HAOI2007 上升序列
    HNOI2008 玩具装箱
  • 原文地址:https://www.cnblogs.com/cong12586/p/13474198.html
Copyright © 2011-2022 走看看