문제
https://www.acmicpc.net/problem/15684
15684번: 사다리 조작
사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선
www.acmicpc.net
코드
n,m,h=map(int,input().split())
graph=[[False]*(n+1) for _ in range(h+1)]
array=[]
for _ in range(m):
a,b=map(int, input().split())
graph[a][b]=True
for i in range(1,h+1):
for j in range(1,n):
if not graph[i][j] and not graph[i][j-1] and not graph[i][j+1]:
array.append([i,j])
def check():
for i in range(1,n+1):
cur=i
for j in range(1,h+1):
if graph[j][cur-1]:
cur-=1
elif graph[j][cur]:
cur+=1
if cur != i:
return False
return True
def dfs(depth,a_i):
global answer
if answer<=depth:
return
if check():
answer=depth
return
for i in range(a_i,len(array)):
x,y=array[i]
if not graph[x][y-1] and not graph[x][y+1]:
graph[x][y]=True
dfs(depth+1,i+1)
graph[x][y]=False
answer=4
dfs(0,0)
print(answer if answer<4 else -1)
'문제풀이 > DFS & BFS' 카테고리의 다른 글
[파이썬] [DFS] 백준 1759 암호 만들기 (0) | 2022.05.27 |
---|---|
[PyPy] [BFS] 백준 9019 DSLR (0) | 2022.05.26 |
[파이썬] [DFS] 백준 14500 테트로미노 (0) | 2022.05.15 |
[파이썬] [BFS] 백준 1707 이분 그래프 (0) | 2022.05.11 |
[파이썬] [DFS] 백준 1068 트리 (0) | 2022.05.11 |