코딩스터디

1226. [S/W 문제해결 기본] 7일차 - 미로1

애플앤마블 2019. 5. 13. 00:17
반응형
SMALL

본 문제는 swexpertacademy D4. 1226 문제이며 히하15님의 코드를 보고 배웠음을 알리며 히하15님이 이 글을 본다면 감사의 의미를 전하고 싶으니 쪽지 부탁드립니다.

Maze by Eunji Kang from the Noun Project

미로의 기본적인 문제이며 미로를 입력받고 출발점과 끝점을 저장한다. 그 후 지나온 길을 표시하고 갈 수 있는 길에 대해 상하좌우를 탐색하며 미로를 찾는다.

#include<iostream>
using namespace std;

char maze[16][16];
int visit[16][16];

int dx[4] = {0,0,-1,1};
int dy[4] = {-1,1,0,0};
int entry_x, entry_y, exit_x, exit_y;
int sol;

bool check(int y, int x){
    if(y>=0&&y<16&&x>=0&&x<16&&maze[y][x]!='1'&&!visit[y][x])
        return true;
    return false;
}

void dfs(int y, int x){
    if(y==exit_y&&x==exit_x){
        sol=1;
        return;
    }
    int ny, nx;
    for(int i=0; i<4; i++){
        ny=y+dy[i];
        nx=x+dx[i];
        if(check(ny, nx)){
            visit[ny][nx] = 1;
            dfs(ny, nx);
        }
    }
}

void init(){
    sol=0;
    for(int i=0; i<16; i++){
        for(int j=0; j<16; j++){
            visit[i][j]=0;
        }
    }
}

int main(){
    int T=0;
    for(int t=1; t<=10; t++){
        cin>>T;
        for(int i=0; i<16; i++) {
            for(int j=0; j<16; j++){
                cin>>maze[i][j];
                if(maze[i][j] == '2'){
                    entry_y = i;
                    entry_x = j;
                }
                else if(maze[i][j] == '3'){
                    exit_y = i;
                    exit_x = j;
                }
            }
        }
        visit[entry_y][entry_x]  = 1;
        dfs(entry_y, entry_x);
        cout<<"#"<<t<<" "<<sol<<endl;
        init();
    }
    return 0;
}

 

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14vXUqAGMCFAYD&categoryId=AV14vXUqAGMCFAYD&categoryType=CODE

불러오는 중입니다...

 

반응형
LIST