Lösen mit Ruby und Python AtCoder ABC151 D Suche nach Breitenpriorität

Einführung

Dieses Thema

AtCoder Beginner Contest D - Maze Master Difficulty: 969

Dieses Thema, Breite Priorität Suche

Da es sich um eine Suche mit Breitenpriorität handelt, handelt es sich um eine grundlegende * Lösung mit Ruby, Perl, Java und Python AtCoder ATC 002 A -Qiita * und eine Anwendung * Ruby und Perl Passen Sie AtCoder AGC 033 A Width Priority Search -Qiita * an, um es in Java und Python zu lösen. Dieses Mal ist die Bedingung locker als "1 ≤ H, W ≤ 20", also werden wir alle "." Als Ausgangspunkt untersuchen. Ruby

ruby.rb


h, w = gets.split.map(&:to_i)
cm = Array.new(h + 2){Array.new(w + 2, 0)}
que = []
a = []
1.upto(h) do |i|
  s = gets.chomp
  1.upto(w) do |j|
    if s[j - 1] == '.'
      cm[i][j] = -1
      a << [i, j]
    end
  end
end
ans = 0
a.each do |b|
  dm = Marshal.load(Marshal.dump(cm))
  que << [b[0], b[1], 0]
  dm[b[0]][b[1]] = 0
  while que.size > 0
    y, x, r = que.shift
    ans = r + 1 if ans < r + 1
    if dm[y + 1][x] == -1
      dm[y + 1][x] = r + 1
      que << [y + 1, x, r + 1]
    end
    if dm[y - 1][x] == -1
      dm[y - 1][x] = r + 1
      que << [y - 1, x, r + 1]
    end
    if dm[y][x - 1] == -1
      dm[y][x - 1] = r + 1
      que << [y, x - 1, r + 1]
    end
    if dm[y][x + 1] == -1
      dm[y][x + 1] = r + 1
      que << [y, x + 1, r + 1]
    end
  end
end
puts ans - 1

que.rb


    if s[j - 1] == '.'
      cm[i][j] = -1
      a << [i, j]
    end

Alle . sind als Startpunkte registriert.

Marshal.rb


  dm = Marshal.load(Marshal.dump(cm))

Es passt zu einer flachen Kopie. Machen Sie eine tiefe Kopie mit "Marschall". Python

from sys import stdin

def main():
    from collections import deque
    import copy
    input = stdin.readline

    h, w = map(int, input().split())
    cm = [[0] * (w + 2) for _ in range(h + 2)]
    que = deque([])
    a = deque([])
    for i in range(1, h + 1):
        s = input()
        for j in range(1, w + 2):
            if s[j - 1] == ".":
                cm[i][j] = -1
                a.append([i, j])
    ans = 0
    for b in a:
        dm = copy.deepcopy(cm)
        que.append(b[0])
        que.append(b[1])
        que.append(0)
        dm[b[0]][b[1]] = 0
        while len(que) > 0:
            y = que.popleft()
            x = que.popleft()
            r = que.popleft()
            if ans < r + 1:
                ans = r + 1
            if dm[y + 1][x] == -1:
                dm[y + 1][x] = r + 1
                que.append(y + 1)
                que.append(x)
                que.append(r + 1)
            if dm[y - 1][x] == -1:
                dm[y - 1][x] = r + 1
                que.append(y - 1)
                que.append(x)
                que.append(r + 1)
            if dm[y][x + 1] == -1:
                dm[y][x + 1] = r + 1
                que.append(y)
                que.append(x + 1)
                que.append(r + 1)
            if dm[y][x - 1] == -1:
                dm[y][x - 1] = r + 1
                que.append(y)
                que.append(x - 1)
                que.append(r + 1)
    print(ans - 1)
main()

deepcopy.py


        dm = copy.deepcopy(cm)

*** Eine tiefe Kopie von Python *** ist "Deepcopy"

Ruby Python
Codelänge(Byte) 832 1502
Ausführungszeit(ms) 112 328
Erinnerung(KB) 2428 3572

Zusammenfassung

Referenzierte Site

Recommended Posts

Lösen mit Ruby und Python AtCoder ABC151 D Suche nach Breitenpriorität
Lösen mit Ruby und Python AtCoder ABC178 D Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC138 D Benachbarte Liste
Lösen mit Ruby, Python und networkx AtCoder ABC168 D Benachbarte Liste
Lösen mit Ruby und Python AtCoder ABC057 C Zerlegung des Primfaktors Bit vollständige Suche
Lösen mit Ruby, Perl, Java und Python AtCoder AGC 033 Eine Suche mit Breitenpriorität
AtCoder ABC 165 D Bodenfunktion in Ruby, Perl, Java und Python gelöst
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 131 D Sortieren von Arrays
Lösen mit Ruby und Python AtCoder ABC133 D Kumulative Summe
Lösen mit Ruby und Python AtCoder AISING2020 D Iterative Square-Methode
Lösen mit Ruby und Python AtCoder ABC011 C Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC153 E Dynamische Planungsmethode
Lösen in Ruby, Python und Java AtCoder ABC141 D Priority Queue
Lösen mit Ruby, Python und numpy AtCoder ABC054 B Matrixberechnung
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 065 C-te Potenz
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 107 B String-Manipulation
AtCoder ABC130 D Kumulative Summen-Dichotomie, gelöst durch Ruby und Python
Lösen mit Ruby und Python AtCoder ABC084 D Kumulative Summe der Primzahlen
Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 A.
Lösen mit Ruby und Python AtCoder ARC067 C Primfaktorisierung
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 B.
Löse AtCoder ABC168 mit Python (A ~ D)
AtCoder ABC110 C-String-Manipulation zum Lösen in Ruby
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 098 C Kumulative Summe
Lösen mit Ruby, Perl, Java und Python AtCoder CADDi 2018 C Primfaktorisierung
Lösen mit Ruby und Python AtCoder Tenka1 Programmer Contest C Kumulative Summe
Lösen mit Ruby und Python AtCoder ABC172 C Kumulative Summen-Dichotomie
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 047 C Regulärer Ausdruck
Löse AtCoder ABC166 mit Python
AtCoder ABC 182 Python (A ~ D)
[Python] Suche nach Tiefenpriorität und Suche nach Breitenpriorität
AtCoder ARC080 D Simulation mit Ruby und Python gelöst
Lösen mit Ruby und Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
AtCoder ABC155 Problem D Pairs Review Note 2 NumPy und Python
Scraping mit Node, Ruby und Python
Löse ABC166 A ~ D mit Python
Lösen mit Ruby, Perl, Java und Python AtCoder diverta 2019 Programmierwettbewerb C String Manipulation
AtCoder ABC 114 C-755 mit Python3 gelöst
AtCoder ABC168 Ein in Ruby und Python gelöster Fallausdruck
AtCoder ARC104 B Kumulative Summe in Ruby, Python und Java gelöst
[AtCoder] Löse ABC1 ~ 100 Ein Problem mit Python
Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln
Einfaches Web-Scraping mit Python und Ruby
AtCoder ABC 174 Python
AtCoder ABC 175 Python
Lösen Sie mit Python [100 frühere Fragen, die Anfänger und Fortgeschrittene lösen sollten] (028 - 033 Suche nach Breitenpriorität)
[AtCoder] Lösen Sie ein Problem von ABC101 ~ 169 mit Python
Suchen und laden Sie YouTube-Videos automatisch mit Python herunter
Kausales Denken und kausale Suche von Python (für Anfänger)
Lösen des Lorenz 96-Modells mit Julia und Python
Fordern Sie AtCoder (ABC) 164 mit Python heraus! A ~ C Problem
[AtCoder-Erklärung] Kontrollieren Sie die A-, B-, C- und D-Probleme von ABC183 mit Python!
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 066 C Iterativer Square Hash
[Erklärung zum AtCoder] Kontrollieren Sie die A-, B-, C- und D-Probleme von ABC181 mit Python!
Sequentielle Suche mit Python
Löse AtCoder 167 mit Python
Python-Übung 1-Breiten-Prioritätssuche