7일차-미로2

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=4&contestProbId=AV14wL9KAGkCFAYD&categoryId=AV14wL9KAGkCFAYD&categoryType=CODE&problemTitle=&orderBy=SUBMIT_COUNT&selectCodeLang=ALL&select-1=4&pageSize=10&pageIndex=2

그냥 노말한 길찾기 문제임


#include <iostream>
#include <string.h>
#include <vector>
#include <queue>

using namespace std;

int arr[100][100] = { 0, };
int visit[100][100] = { 0, };
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,-1,0,1 };

int answer;

int  bfs(int y, int x)
{
    queue<pair<int, int>> qTemp;
    qTemp.push(make_pair(y, x));//
    visit[y][x] = 1;
    while (!qTemp.empty())
    {
        int iTempy = qTemp.front().first;
        int iTempx = qTemp.front().second;
        qTemp.pop();
        for (int i = 0; i < 4; i++)
        {
            int ny = iTempy+dy[i];
            int nx = iTempx+dx[i];
            if (ny >= 0 && ny < 100 && nx >= 0 && nx < 100)//기본 사각 바운더리
            {
                if ((arr[ny][nx] == 0 && visit[ny][nx] == 0) || (arr[ny][nx] == 3 && visit[ny][nx] == 0))//0이고 방문 안했으면
                {
                    if (arr[ny][nx] == 3)
                    {
                        return 1;
                    }
                    else
                    {
                        visit[ny][nx] = 1;
                        qTemp.push(make_pair(ny, nx));
                    }
                }
            }
        }
    }

    return 0;
}

void clear()
{
    for (int i = 0; i < 100; i++)
    {
        for (int j = 0; j < 100; j++)
        {
            arr[i][j] = 0;
            visit[i][j] = 0;
        }
    }
    answer = 0;
}

int main() {

    int test_case;


    for (test_case = 0; test_case < 10; test_case++) 
    {
        clear();

        int iCnt(0);
         cin >> iCnt;

         for (int i = 0; i < 100; i++)
         {
             for (int j = 0; j < 100; j++)
             {
                 scanf_s("%1d", &arr[i][j]);
             }
         }
     

         for (int i = 0; i < 100; i++)
         {
             for (int j = 0; j < 100; j++)
             {
                 if (arr[i][j] == 2)
                 {
                     answer =  bfs(i, j);
                 }
             }
         }
     
        //출력
        cout << "#" << test_case+1 << " " << answer << endl;
    }

    //종료
    return 0;
}

좋은 웹페이지 즐겨찾기