#include <stdio.h>
#include <queue>
using namespace std;
int N;
int map[101][101];
int dist[101][101];
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
int visited[101][101];
queue<pair<int, int>> q;
void initialize()
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
dist[i][j] = 0;
visited[i][j] = 0;
}
}
}
void solve(int x, int y)
{
q.push(make_pair(x, y));
visited[x][y] = 1;
while (!q.empty())
{
int cntx = q.front().first;
int cnty = q.front().second;
q.pop();
for (int i = 0; i < 4; i++)
{
int nx = dx[i] + cntx;
int ny = dy[i] + cnty;
if (nx < 0 || ny < 0 || nx >= N || ny >= N)
continue;
if (!visited[nx][ny] || dist[nx][ny] > dist[cntx][cnty] + map[nx][ny])
{
q.push({ nx, ny });
dist[nx][ny] = dist[cntx][cnty] + map[nx][ny];
visited[nx][ny] = 1;
}
}
}
}
int main()
{
int tc;
scanf("%d", &tc);
for (int t = 1; t <= tc; t++)
{
scanf("%d", &N);
initialize();
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
scanf("%1d", &map[i][j]);
}
}
solve(0, 0);
printf("#%d %d\n", t, dist[N - 1][N - 1]);
}
return 0;
}
1. bfs 사용
좀 어렵게 푼거 같아서 다시 풀어봐야겠땅
'공부 > SWEA' 카테고리의 다른 글
SWEA 11226. [S/W 문제해결 기본] 7일차 - 미로1 (C++) (2) | 2024.05.15 |
---|---|
SWEA 1210. [S/W 문제해결 기본] 2일차 - Ladder1 (C++) (0) | 2024.05.15 |
SWEA 3376. 파도반 수열 (C++) (0) | 2024.05.15 |
SWEA 6855. 신도시 전기 연결하기 (C++) (0) | 2024.05.14 |
SWEA 3408. 세가지 합 구하기 (C++) (0) | 2024.05.12 |