Algorithm/AlgoStudy

길찾기 문제(python,c++)

유쾌한고등어 2023. 2. 14. 06:55

길찾기문제

방향값을 미리 코드에 짜두고 for문으로 순회하는 기법을 꼭 익혀두자!

방문체크필요 , 각 칸이 노드, 상하좌우 4방향의 간선

 

# python

from collections import deque
dy = (0,1,0,-1)
dx = (1,0,-1,0)
chk = [[False] * 100 for _ in range(100)]
N = int(input())

def is_valid_coord(y,x):
    return 0<=y<N and 0<=x<N

def bfs(start_y,start_x):
    q = deque()
    q.append((start_y,start_x))
    while len(q) > 0:
        y,x = q.popleft()
        chk[y][x] = True # 방문체크
        for k in range(4):
            ny = y + dy[k]
            nx = x + dx[k]
            
            # 유효,방문X 노드일경우 q에 넣는다.
            if is_valid_coord(ny,nx) and not chk[ny][nx]:
                q.append((ny,nx))

 

# C++

const int dy[4] = {0, 1, 0, -1};
const int dx[4] = {1, 0, -1, 0};
int N;
bool chk[100][100];

bool isValidCoord(int y,int x){
    return 0<=y && y<N && 0<=x && x<N;
}

void dfs(int y,int x){
    chk[y][x] = true;
    for(int k=0;k<4;++k){
        int ny = y+dy[k];
        int nx = x+dx[k];
        if(isValidCoord(ny,nx) && !chk[ny][nx])
            dfs(ny,nx);
    }
}