BOJ 1012有機白菜
1592 ワード
https://www.acmicpc.net/problem/1012
1秒、512 MBメモリ
input :試験盤箱数T 横長M,縦長N,ハクサイ栽培位置の個数K(1<=M,N<=50)(1<=K<=2500) .白菜の位置X,Y(0<=X<=M-1),(0<=Y<=N-1) output :
出力で最も少ない白菜白ミミズの数. 条件:白菜の上下左右にそれぞれ1つの白菜があり、隣接しているとみなされます. 本の白菜を数えるパーティー. 白菜がある1、ない024579182
BOJ 4963島と同じ数の問題
必要な変数.
空のグラフ(白菜の位置を示す)、visitは必要ありません
DFSを入力した回数はarlycnt変数3個です.
BFSで解決することもできますが、DFSで解決したばかりなのでDFSで解決しましょう.
に対する拘束が不十分です.
DFS関数.△1人を0に変えましょう.
正しいコード:
1秒、512 MBメモリ
input :
出力
BOJ 4963島と同じ数の問題
必要な変数.
空のグラフ(白菜の位置を示す)、visitは必要ありません
DFSを入力した回数はarlycnt変数3個です.
BFSで解決することもできますが、DFSで解決したばかりなのでDFSで解決しましょう.
に対する拘束が不十分です.
DFS関数.△1人を0に変えましょう.
正しいコード:
import sys
sys.setrecursionlimit(10000)
T = int(sys.stdin.readline())
ans = []
def DFS(navi, position):
navi[position[0]][position[1]] = 0
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
for i in range(len(dx)):
nx = position[0] + dx[i]
ny = position[1] + dy[i]
if nx >= n or nx < 0 or ny >= m or ny < 0:
continue
if navi[nx][ny]:
DFS(navi, [nx, ny])
for _ in range(T):
m, n, k = map(int, sys.stdin.readline().split())
graph = [[0] * m for _ in range(n)]
for i in range(k):
y, x = map(int, sys.stdin.readline().split())
graph[x][y] = 1
cnt = 0
for x in range(n):
for y in range(m):
if graph[x][y]:
DFS(graph, [x, y])
cnt += 1
ans.append(cnt)
for data in ans:
print(data)
Reference
この問題について(BOJ 1012有機白菜), 我々は、より多くの情報をここで見つけました https://velog.io/@jsin2475/BOJ-1012-유기농-배추テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol