๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DFS,BFS

[๋ฐฑ์ค€]7562๋ฒˆ: ๋‚˜์ดํŠธ์˜ ์ด๋™

by syLim___ 2023. 3. 20.
728x90

https://www.acmicpc.net/problem/7562

 

7562๋ฒˆ: ๋‚˜์ดํŠธ์˜ ์ด๋™

์ฒด์ŠคํŒ ์œ„์— ํ•œ ๋‚˜์ดํŠธ๊ฐ€ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ํ•œ ๋ฒˆ์— ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์€ ์•„๋ž˜ ๊ทธ๋ฆผ์— ๋‚˜์™€์žˆ๋‹ค. ๋‚˜์ดํŠธ๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นธ์ด ์ฃผ์–ด์ง„๋‹ค. ๋‚˜์ดํŠธ๋Š” ๋ช‡ ๋ฒˆ ์›€์ง์ด๋ฉด ์ด ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜

www.acmicpc.net


์•„์ฃผ ๊ฐ„๋‹จํ•œ bfs ๋ฌธ์ œ!

from collections import deque

# ์ด๋™ ๊ฐ€๋Šฅํ•œ 8์นธ
dx = [-1,-2,-2,-1,1,2,2,1]
dy = [-2,-1,1,2,2,1,-1,-2]

test = int(input())
for _ in range(test):
  l = int(input())
  start_x, start_y = map(int,input().split())
  end_x, end_y = map(int,input().split())

  board = [[0]*l for i in range(l)]
  q=deque()
  q.append((start_x,start_y))
    
  while q:
    x, y = q.popleft()
    if x==end_x and y==end_y: # ๋ชฉํ‘œ์ง€์ ์— ๋„์ฐฉํ•˜๋ฉด ์ข…๋ฃŒ
      break
    for i in range(8): # ์ด๋™ ๊ฐ€๋Šฅํ•œ 8์นธ ์ฒดํฌ
      nx = x + dx[i]
      ny = y + dy[i]
      if 0<=nx<l and 0<=ny<l and board[nx][ny]==0: # ๋ฐฉ๋ฌธํ•œ ์  ์—†๋Š” ์นธ์ด๋ฉด
        board[nx][ny] = board[x][y] + 1 # ์ด๋™ ํšŸ์ˆ˜ ๋Š˜๋ ค์ค€๋‹ค
        q.append((nx,ny))

  print(board[x][y]) # ๊ฒฐ๊ณผ ์ถœ๋ ฅ
728x90