C# 2178번 미로 탐색
2022. 3. 12. 15:46ㆍ코딩테스트 문제 풀이/[백준] DFS와 BFS
728x90
반응형
코드 :
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이며 거리를 저장하는 배열을 따로 만들었다. 거리를 저장하는 배열을 출력하면 다음과 같이 나온다.
728x90
반응형
'코딩테스트 문제 풀이 > [백준] 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 |