C# 2178번 미로 탐색

2022. 3. 12. 15:46C#/[백준] DFS와 BFS

코드 :

using System;
using System.Collections.Generic;
namespace _3
{
    class Program
    {
        static int N,M;

        //맵 저장 행렬
        static int[,] map = new int[101, 101];
        //방문 확인 행렬
        static bool[,] visited = new bool[101, 101];
        //시작점부터의 거리를 저장하는 행렬
        static int[,] disMap = new int[101, 101];

        static Queue<(int, int)> queue = new Queue<(int, int)>();

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

        static void Reset() //방문배열 초기화
        {
            for (int i = 0; i <N; i++)
            {
                for (int j = 0; j < M; j++)
                {
                    visited[i, j] = false;
                }
            }
        }
        static void BFS(int x, int y)
        {
            queue.Enqueue((x, y));
            visited[x, y] = true;

            while (queue.Count != 0)
            {
                var cur = queue.Dequeue();
                
                //pop됐을때의 x좌표와 y좌표
                int curx = cur.Item1;
                int cury = cur.Item2;
               
                
                //상하좌우 체크
                for (int i = 0; i < 4; i++)
                {
                    curx = cur.Item1 + dx[i];
                    cury = cur.Item2 + dy[i];
                    //인덱스 범위를 벗어나면 continue
                    if (curx < 0 || cury < 0 || curx > N || cury > M)
                        continue;
                    //이미 방문했거나 해당 집이 0이면 continue
                    if (visited[curx, cury] == true || map[curx, cury] == 0)
                        continue;
                    visited[curx, cury] = true;
                    queue.Enqueue((curx, cury));

                    //아까 Pop했던 정보를 기억해두고 거리 맵 배열에 += 해줌
                    disMap[curx, cury] += disMap[cur.Item1, cur.Item2];
                }
            }

        }
        static void Main(string[] args)
        {
            int[] inputdata  = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
            N = inputdata[0];
            M = inputdata[1];
            
            //map배열 초기화
            for (int i = 0; i < N; i++)
            {
                string input = Console.ReadLine();
                for (int j = 0; j < input.Length; j++)
                {
                    map[i, j] = Convert.ToInt32((input[j].ToString()));
                    disMap[i, j] = Convert.ToInt32((input[j].ToString()));
                }
            }

            //방문 배열 초기화
            Reset();            
            //시작
            BFS(0, 0);

            Console.WriteLine(disMap[N-1,M-1]);

        }
    }
}

문제 풀이 :

기본적인 BFS이며 거리를 저장하는 배열을 따로 만들었다. 거리를 저장하는 배열을 출력하면 다음과 같이 나온다.

'C# > [백준] DFS와 BFS' 카테고리의 다른 글

C# 7576번 토마토  (0) 2022.03.13
C# 1012번 유기농 배추  (0) 2022.03.12
C# 2667번 단지번호붙이기  (0) 2022.03.04
C# 2606번 바이러스  (0) 2022.03.04
C# 1260번 DFS와 BFS  (0) 2022.03.04