-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBOJ_16236.py
More file actions
72 lines (53 loc) · 1.37 KB
/
BOJ_16236.py
File metadata and controls
72 lines (53 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from collections import deque
N = int(input())
board = []
for _ in range(N) :
board.append(list(map(int, input().split())))
dr = [-1,0,1,0]
dc = [0,-1,0,1]
eat = 0
size = 2
ans = 0
r = -1
c = -1
def in_range(r,c) :
if r<0 or r>=N or c<0 or c>=N : return False
return True
def bfs() :
global eat, ans, r, c, size
visited = [[-1 for _ in range(N)] for _ in range(N)]
visited[r][c] = 0
q = deque()
q.append([r,c])
tmp = []
board[r][c] = 0
while q :
cr,cc = q.popleft()
if board[cr][cc] != 0 and board[cr][cc] < size :
tmp.append([visited[cr][cc], cr,cc])
for i in range(4) :
nr = cr + dr[i]
nc = cc + dc[i]
if not in_range(nr,nc) or visited[nr][nc]>=0 or board[nr][nc] > size: continue
visited[nr][nc] = visited[cr][cc] + 1
q.append([nr,nc])
if len(tmp) == 0 : return False
else :
tmp.sort()
r = tmp[0][1]
c = tmp[0][2]
board[r][c] = 9
eat += 1
if eat == size :
size += 1
eat = 0
ans += tmp[0][0]
return True
for i in range(N) :
for j in range(N) :
if board[i][j] == 9:
r = i
c = j
while bfs() :
pass
print(ans)