Résolution avec Ruby et Python AtCoder ABC151 D Recherche de priorité de largeur

introduction

Ce thème

AtCoder Beginner Contest D - Maze Master Difficulty: 969

Ce thème, recherche de priorité de largeur

Puisqu'il s'agit d'une recherche avec priorité à la largeur, il s'agit d'une * résoudre avec Ruby, Perl, Java et Python AtCoder ATC 002 A -Qiita * et une application * Ruby et Perl Personnaliser AtCoder AGC 033 Une recherche de priorité de largeur -Qiita * pour résoudre en Java et Python. Cette fois, la contrainte est lâche comme «1 ≤ H, W ≤ 20», nous allons donc étudier tout «.» Comme point de départ. 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

Tous les «.» Sont enregistrés comme points de départ.

Marshal.rb


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

Il s'adapte à une copie peu profonde. Faites une copie complète avec Marshal. 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)

*** Une copie profonde de Python *** est deepcopy

Ruby Python
Longueur du code(Byte) 832 1502
Temps d'exécution(ms) 112 328
Mémoire(KB) 2428 3572

Résumé

Site référencé

Recommended Posts

Résolution avec Ruby et Python AtCoder ABC151 D Recherche de priorité de largeur
Résolution avec Ruby et Python AtCoder ABC178 D Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ABC138 D Liste adjacente
Résolution avec Ruby, Python et networkx AtCoder ABC168 D Liste adjacente
Résolution avec Ruby et Python AtCoder ABC057 C Décomposition du facteur premier Recherche complète de bits
Résolution avec Ruby, Perl, Java et Python AtCoder AGC 033 A Recherche de priorité de largeur
AtCoder ABC 165 D Floor Function résolue en Ruby, Perl, Java et Python
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 131 D Tri des tableaux
Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée
Résolution avec Ruby et Python AtCoder AISING2020 D Méthode carrée itérative
Résolution avec Ruby et Python AtCoder ABC011 C Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ABC153 E Méthode de planification dynamique
Résolution en Ruby, Python et Java AtCoder ABC141 D Priority Queue
Résolution avec Ruby, Python et numpy AtCoder ABC054 B Calcul de la matrice
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 065 C-th power
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 107 B Manipulation de chaînes
AtCoder ABC130 D Dichotomie de la somme cumulée résolue par Ruby et Python
Résoudre avec Ruby et Python AtCoder ABC084 D Somme cumulative des nombres premiers
Résolution avec Ruby et Python AtCoder ARC 059 C Méthode du carré minimum
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 A
Résolution avec Ruby et Python AtCoder ARC067 C factorisation premier
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 B
Résoudre AtCoder ABC168 avec python (A ~ D)
Manipulation de chaîne C AtCoder ABC110 à résoudre dans Ruby
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 098 C Somme cumulative
Résolution avec Ruby, Perl, Java et Python AtCoder CADDi 2018 C factorisation premier
Résolution avec Ruby et Python AtCoder Tenka1 Programmer Contest C Somme cumulative
Résolution avec Ruby et Python AtCoder ABC172 C Dichotomie de somme cumulée
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 047 C Expression régulière
Résolvez AtCoder ABC166 avec python
AtCoder ABC 182 Python (A ~ D)
[Python] Recherche de priorité de profondeur et recherche de priorité de largeur
Simulation AtCoder ARC080 D résolue avec Ruby et Python
Résolution avec Ruby et Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
AtCoder ABC155 Problème D Pairs Review Note 2 NumPy et Python
Scraping avec Node, Ruby et Python
Résoudre ABC166 A ~ D avec Python
Résolution avec Ruby, Perl, Java et Python AtCoder Diverta 2019 Concours de programmation Manipulation de chaînes C
Résolu AtCoder ABC 114 C-755 avec Python3
AtCoder ABC168 Une expression de cas résolue en Ruby et Python
AtCoder ARC104 B Somme cumulative résolue en Ruby, Python et Java
[AtCoder] Résoudre ABC1 ~ 100 Un problème avec Python
Crypter avec Ruby (Rails) et décrypter avec Python
Scraping Web facile avec Python et Ruby
AtCoder ABC 174 Python
AtCoder ABC 175 Python
Résoudre avec Python [100 questions passées que les débutants et les intermédiaires devraient résoudre] (028 --033 recherche de priorité de largeur)
[AtCoder] Résoudre un problème de ABC101 ~ 169 avec Python
Rechercher et télécharger automatiquement des vidéos YouTube avec Python
Raisonnement causal et recherche causale par Python (pour les débutants)
Résolution du modèle Lorenz 96 avec Julia et Python
Défiez AtCoder (ABC) 164 avec Python! Un problème ~ C
[Explication AtCoder] Contrôlez les problèmes A, B, C, D d'ABC183 avec Python!
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 066 C Hash carré itératif
[Explication AtCoder] Contrôlez les problèmes A, B, C, D d'ABC181 avec Python!
Recherche séquentielle avec Python
Résolvez AtCoder 167 avec python
Exercice Python Recherche prioritaire sur 1 largeur