맵과 방향벡터

Kim Yuhyeon·2023년 7월 18일
0

알고리즘 + 자료구조

목록 보기
111/161
// 위 -> 오른쪽 -> 아래 -> 왼쪽
const int dy[] = {-1, 0, 1, 0};
const int dx[] = {0, 1, 0, -1};

for(int i=0; i<4; i++)
{
	ny = y + dy[i];
    nx = x + dx[i];
}

문제

Q. {0,0} 좌표에서 dy, dx를 만들어 4방향(위, 오른쪽 ,아래, 왼쪽)을 탐색하며 좌표를 출력

int x = 0, y = 0;

const int dy[] = {-1, 0, 1, 0};
const int dx[] = {0, 1, 0, -1};

for(int i=0; i<4; i++)
{
	int nx = x + dx[i];
    int ny = y + dy[i];
    
    cout << ny << "," << nx << '\n'; 
}

Q. {0,0} 좌표에서 dy, dx를 만들어 8방향(위, 오른쪽 ,아래, 왼쪽, 대각선)을 탐색하며 좌표를 출력

int x = 0, y = 0;

const int dy[] = {-1, -1, 0, 1, 1, 1, 0, -1};
const int dx[] = {0, 1, 1, 1, 0, -1, -1, -1};

for(int i=0; i<8; i++)
{
	int nx = x + dx[i];
    int ny = y + dy[i];
    
    cout << ny << "," << nx << '\n'; 
}

Q. 3*3 맵을 입력받아야 함. 1과 0으로 이루어져 있고 {0,0} = 1, {0,0} 좌표에서 4방향을 기준으로 한 칸씩 탐색해나가며 방문한 정점은 방문하지 않으며 방문하는 좌표를 출력하는 코드 (0은 갈 수 없는 지역, 1은 갈 수 있는 지역을 구현)

const int dy[] = {-1, 0, 1, 0};
const int dx[] = {0, 1, 0, -1};

const int size = 3;

int map[size][size];
bool visited[size][size];


void Visit(int y, int x)
{
	
    cout << x << "," << y << '\n'; 
    visited[y][x] = true;

	for(int i=0; i<4; i++)
    {
        int nx = x + dx[i];
        int ny = y + dy[i];
		
        if (nx < 0 || ny < 0 || nx >= size || ny >= size)
            continue;
            
        if (!map[ny][nx])
        	continue;
  	
        if (visited[ny][nx])
        	continue;
            
        Visit(ny, nx);
    }
}

int main()
{

	for(int i=0; i<size; i++)
    {	
    	for(int j=0; j<size; j++)
        {
        	cin >> map[i][j];
        }
        
    }
	Visit(0, 0);

}

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

소중한 정보 잘 봤습니다!

답글 달기
comment-user-thumbnail
2023년 7월 18일

잘 읽었습니다. 좋은 정보 감사드립니다.

답글 달기