6日目
5440 ワード
データ構造アルゴリズムの復習
白準2606題
ウイルス
特にありませんが、グラフのdirectが基本だと思いますので、データ入力に注意しましょう.
白俊10026号です.
赤緑薬
処理速度が遅く、コードが混乱している.解題アルゴリズムでは,人間の解題方式を直感的に受け入れ,加工を経ずに体現し,専門性がない.今Pythonの文法を熟知するため、資料の構造を熟知して、後で解釈することを決定します.
接触したエラー
TypeError : unhashable type: 'set'
->dictionaryのkey dataに可変値が含まれている場合に発生します.
白準2606題
ウイルス
from collections import deque
import sys
I = sys.stdin.readline
def breadth_first_search(graph, root):
queue = deque([root])
discovered = [root]
visited = []
while len(queue) > 0:
node = queue.popleft()
visited.append(node)
undiscovered = set(graph[node]).difference(set(discovered))
if undiscovered:
discovered.extend(undiscovered)
for elem in sorted(undiscovered):
queue.append(elem)
return visited
def depth_first_search(graph, root):
stack = [root]
discovered = [root]
visited = []
while stack:
node = stack.pop()
visited.append(node)
undiscovered = set(graph[node]).difference(set(discovered))
if undiscovered:
discovered.extend(undiscovered)
data = sorted(undiscovered)
while data:
a = data.pop()
stack.append(a)
return visited
n = int(I())
m = int(I())
graph1 = {}
for i in range(1, n+1):
graph1[str(i)] = []
for _ in range(m):
vertex, data = I().split()
graph1[vertex].append(data)
graph1[data].append(vertex)
result = breadth_first_search(graph1, '1')
print(len(result) - 1)
結果特にありませんが、グラフのdirectが基本だと思いますので、データ入力に注意しましょう.
白俊10026号です.
赤緑薬
from collections import deque
import sys
import copy
I = sys.stdin.readline
def breadth_first_search(graph, root):
queue = deque([root])
discovered = [root]
visited = []
while len(queue) > 0:
node = queue.popleft()
visited.append(node)
undiscovered = set(graph[node]).difference(set(discovered))
if undiscovered:
discovered.extend(undiscovered)
for elem in sorted(undiscovered):
queue.append(elem)
return visited
def depth_first_search(graph, root):
stack = [root]
discovered = [root]
visited = []
while stack:
node = stack.pop()
visited.append(node)
undiscovered = set(graph[node]).difference(set(discovered))
if undiscovered:
discovered.extend(undiscovered)
data = sorted(undiscovered)
while data:
a = data.pop()
stack.append(a)
return visited
def up(graph, paper, i, j):
if paper[i][j] == paper[i-1][j]:
graph[(i, j)].append((i-1,j))
def down(graph, paper, i, j):
if paper[i][j] == paper[i+1][j]:
graph[(i, j)].append((i+1,j))
def left(graph, paper, i, j):
if paper[i][j] == paper[i][j-1]:
graph[(i, j)].append((i,j-1))
def right(graph, paper, i, j):
if paper[i][j] == paper[i][j+1]:
graph[(i, j)].append((i, j+1))
def determine_group_color(graph, paper, n):
for i in range(n):
for j in range(n):
if 1 <= i < n-1 :
if j == 0:
up(graph, paper, i, j)
right(graph, paper, i, j)
down(graph, paper, i, j)
elif j == n-1:
up(graph, paper, i, j)
left(graph, paper, i, j)
down(graph, paper, i, j)
else:
up(graph, paper, i, j)
right(graph, paper, i, j)
down(graph, paper, i, j)
left(graph, paper, i, j)
elif i == 0:
if j == 0:
right(graph, paper, i, j)
down(graph, paper, i, j)
elif j == n-1:
left(graph, paper, i, j)
down(graph, paper, i, j)
else:
right(graph, paper, i, j)
down(graph, paper, i, j)
left(graph, paper, i, j)
else:
if j == 0:
up(graph, paper, i, j)
right(graph, paper, i, j)
elif j == n-1:
up(graph, paper, i, j)
left(graph, paper, i, j)
else:
up(graph, paper, i, j)
right(graph, paper, i, j)
left(graph, paper, i, j)
graph = {}
graph_dsb = {}
num = int(I())
li = []
for _ in range(num):
li.append([color for color in I().rstrip('\n')])
li_dsb = copy.deepcopy(li)
for i in range(num):
for j in range(num):
if li_dsb[i][j] == 'G':
li_dsb[i][j] = 'R'
for i in range(num):
for j in range(num):
graph[(i,j)] = []
for i in range(num):
for j in range(num):
graph_dsb[(i,j)] = []
determine_group_color(graph, li, num)
determine_group_color(graph_dsb, li_dsb, num)
li = []
li_dsb = []
cnt = 0
cnt_dsb = 0
for i in range(num):
for j in range(num):
if (i, j) not in li:
li.extend(breadth_first_search(graph, (i, j)))
cnt += 1
for i in range(num):
for j in range(num):
if (i, j) not in li_dsb:
li_dsb.extend(breadth_first_search(graph_dsb, (i, j)))
cnt_dsb += 1
print(cnt, cnt_dsb)
結果処理速度が遅く、コードが混乱している.解題アルゴリズムでは,人間の解題方式を直感的に受け入れ,加工を経ずに体現し,専門性がない.今Pythonの文法を熟知するため、資料の構造を熟知して、後で解釈することを決定します.
接触したエラー
TypeError : unhashable type: 'set'
->dictionaryのkey dataに可変値が含まれている場合に発生します.
Reference
この問題について(6日目), 我々は、より多くの情報をここで見つけました https://velog.io/@jujemu/6일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol