Ich habe versucht, AtCoders Depth Priority Search (DFS) in Python zu lösen (Ergebnis: TLE ...)

Zweck

・ Nachdem ich Python studiert habe, habe ich in letzter Zeit viel wettbewerbsfähiges Programmieren gemacht. Bei der Lösung der vergangenen Fragen bin ich auf die Suche nach Tiefenprioritäten gestoßen und habe die Lösung zusammengefasst. Das herausgeforderte Problem war die Suche mit Tiefenpriorität nach Problem A in Typical Contest 001. https://atcoder.jp/contests/atc001/tasks/dfs_a

Antworten


class Dfs():
    def dfs(self, h, w, maze, init):
        search_stack = [init] #Speichern Sie die Anfangskoordinaten im Suchstapel
        fin = [] #Abschlussstapel definieren
        while search_stack:
            latest = search_stack.pop() #Extrahieren Sie den aktuellen Speicherort aus dem Suchstapel
            if maze[latest[0]][latest[1]] == "g": #Ausgabe Ja, wenn Ihr aktueller Standort Ziel ist
                print("Yes")
                exit()
            else:
                fin.append(latest) #Speichern Sie die gesuchten Koordinaten im Fertigstellungsstapel
                candi = [(latest[0]-1, latest[1]), (latest[0]+1, latest[1]), (latest[0], latest[1]-1), (latest[0], latest[1]+1)] #Koordinatenkandidaten definieren
                for (ny, nx) in candi:
                    if self.check_range(h, w, ny, nx): #Beurteilung, ob Koordinatenkandidaten außerhalb des Bereichs liegen
                        if self.check_wall(maze, ny, nx): #Bestimmen Sie, ob der Koordinatenkandidat eine Wand ist
                            if not (ny, nx)  in search_stack and not (ny, nx) in fin: #Bestimmen Sie, ob Koordinatenkandidaten im Suchstapel und im Abschlussstapel enthalten sind
                                search_stack.append((ny, nx)) #Im Suchstapel speichern
                                continue
        print("No")                    
        
    def check_range(self, h, w, y, x):
        if x > w-1 or x < 0:
            return False
        elif y > h-1 or y < 0:
            return False
        else:
            return True
    
    def check_wall(self, maze, y, x):
        if maze[y][x] == "#":
            return False
        else: 
            return True

if __name__ == "__main__":
    h,w = map(int,input().split())
    maze = [list(input()) for i in range(h)]
    for y, row in enumerate(maze):
        try:
            init = (y, row.index("s")) #Suchen Sie nach einem Ausgangspunkt
            d = Dfs()
            d.dfs(h, w, maze, init)
            break
        except ValueError:
            pass

Recommended Posts

Ich habe versucht, AtCoders Depth Priority Search (DFS) in Python zu lösen (Ergebnis: TLE ...)
Algorithmus in Python (Tiefenprioritätssuche, dfs)
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich habe versucht, ADALINE in Python zu implementieren
Ich wollte ABC159 mit Python lösen
Ich habe versucht, PPO in Python zu implementieren
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, Drakues Poker in Python zu implementieren
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Implementieren Sie die Suche nach Tiefenpriorität (DFS) und die Suche nach Breitenpriorität (BFS) in Python
Ich habe versucht, AOJs Integer-Theorie mit Python zu lösen
[Python] DFS (Tiefenprioritätssuche) ATC001A
[Python] DFS (Tiefenprioritätssuche) ABC157D
[Für Anfänger von Wettkampfprofis] Ich habe versucht, 40 AOJ "ITP I" -Fragen mit Python zu lösen
Ich habe versucht, einen eindimensionalen Zellautomaten in Python zu implementieren
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Ich habe versucht, die Mail-Sendefunktion in Python zu implementieren
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, das Blackjack of Trump-Spiel mit Python zu implementieren
Ich habe versucht, Python zu berühren (Installation)
Schreiben Sie eine Suche mit Tiefenpriorität in Python
Ich habe Line Benachrichtigung in Python versucht
Suche nach Tiefenpriorität mit Stack in Python
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
Ich habe versucht, "einen genetischen Algorithmus (GA) in Python zu implementieren, um das Problem des Handlungsreisenden (TSP) zu lösen".
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ich wollte ABC160 mit Python lösen
Ich habe versucht, die Bayes'sche Optimierung von Python zu verwenden
Ich habe versucht, Optuna die Nummer lösen zu lassen
Ich habe versucht, TSP mit QAOA zu lösen
[Python] Ich habe versucht, TF-IDF stetig zu berechnen
Ich habe versucht, Python zu berühren (grundlegende Syntax)
Ich wollte ABC172 mit Python lösen
[Python] Ich habe versucht, den kollektiven Typ (Satz) auf leicht verständliche Weise zusammenzufassen.
Wie man offline in Echtzeit schreibt Ich habe versucht, E11 mit Python zu lösen
Ich habe versucht, die Bayes'sche lineare Regression durch Gibbs-Sampling in Python zu implementieren
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Ich habe versucht, einen Formatierer zu entwickeln, der Python-Protokolle in JSON ausgibt
Ich habe versucht, Trumps Kartenspiel in Python zu implementieren
Wie man offline in Echtzeit schreibt Ich habe versucht, E12 mit Python zu lösen
Ich habe versucht, die Zusammenführungssortierung in Python mit möglichst wenigen Zeilen zu implementieren
Ich möchte Dunnetts Test in Python machen
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 5/22]
Ich wollte den NOMURA Contest 2020 mit Python lösen
Ich habe versucht, eine Klasse zu erstellen, mit der Json in Python problemlos serialisiert werden kann
Python: Ich konnte in Lambda rekursieren
Ich möchte mit Python ein Fenster erstellen
[Python] Ich habe versucht, 100 frühere Fragen zu lösen, die Anfänger und Fortgeschrittene lösen sollten [Teil 7/22]
Ich habe versucht, mit Python ein Tippspiel zu spielen
Ich habe versucht, Keras in TFv1.1 zu integrieren
Ich habe versucht, "Birthday Paradox" mit Python zu simulieren
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Geschrieben "Einführung in die Effektüberprüfung" in Python
Ich habe versucht, CloudWatch-Daten mit Python abzurufen