美文网首页
Leetcode--BFS

Leetcode--BFS

作者: Morphiaaa | 来源:发表于2017-03-09 00:09 被阅读0次

    130. Surrounded Regions

    可以分为三个步骤

    1. 初始化一个list或dequequeue = collections.deque([]),遍历矩阵,将所有位于矩阵边缘上的O的坐标存起来
    for i in range(m):
          for j in range(n):
               if (i in [0, m-1] or j in [0, n-1]) and board[i][j] == 'O':
                   queue.append((i, j))
    
    1. 遍历queue中的元素坐标,将每个等于O的元素的上下左右邻居坐标都存入queue中,如果i,j满足条件,且元素等于'O', 就先将其设为'S'
    while queue:
             i, j = queue.popleft()
             if m > i >=0  and n > j >= 0 and board[i][j] == 'O':
                    board[i][j] = 'S'
             queue.append((i-1,j));  queue.append((i+1, j)); 
             queue.append(i, j-1); queue.append((i, j+1))
    

    将上下左右邻居都加进去做检查的原因是,有可能O没有被X围住,这时我们就要保留O在原位置上。特殊情况有:[OOO, OOO,OOO]

    1. 再次遍历数组,将元素为'O'的,赋值为'X',将元素为'S'的,还原成'O'
    for i in range(m):
         for j in range(n):
              if board[i][j] == 'O':
                 board[i][j] = 'X'
              elif board[i][j] == 'S':
                 board[i][j] = 'O'
    

    127. Word Ladder

    先将endword放入wordlist里去,然后初始化一个元素为list类型的deque,先将startword和length = 1放进去,当queue不为空时,就pop出当前的第一个word
    wordlist.append(endword) queue = collections.deque([]) queue.append([startword, 1])

    while queue:
              word, length = queue.popleft()
              if word == endword:
                   return length
              for i in range(len(word)):
                   for j in 'abcdefghijklmnopqrstuvwxyz':
                        if word[i] != j:
                           nextword = word[:i] + j + word[i+1:]
                           if nextword in wordlist:
                                wordlist.remove(nextword)
                                queue.append([nextword, length+1])
    

    每次pop出来一个单词后,通过BFS来构造与它只差一个字母的newword,如果newword存在wordlist里,就证明这个就是我们要找的下一个单词,先将它从wordlist里删除,避免重复访问,然后再将它append到queue里,以便进行下一步查找,并且length要加1. 最后如果得不到endword,就返回0

    相关文章

      网友评论

          本文标题:Leetcode--BFS

          本文链接:https://www.haomeiwen.com/subject/knvigttx.html