Algorithm/SWExpertAcademy
1226. [S/W 문제해결 기본] 7일차 - 미로1
1일1코딩
2020. 2. 17. 20:59
1. BFS, DFS를 사용해서 풀면되는 기본문제 중 하나이다.
2. BFS를 통해 문제를 해결하였다.
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14vXUqAGMCFAYD
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
소스코드 보기
더보기
#include <stdio.h>
#include <queue>
#define MAX_NODE 16
using namespace std;
int map[16][16];
int visited[16][16];
int beginX, beginY, endX, endY;
int dx[] = { 0, 0, -1, 1 };
int dy[] = { 1, -1, 0, 0 };
bool bfs()
{
queue<pair<int, int>> que;
visited[beginY][beginX] = 1;
que.push(make_pair(beginY, beginX));
while (!que.empty()) {
int queSize = que.size();
for (int i = 0; i < queSize; i++) {
int curx = que.front().second;
int cury = que.front().first;
que.pop();
if (curx == endX && cury == endY) {
return true;
}
for (int j = 0; j < 4; j++) {
int nx = curx + dx[j];
int ny = cury + dy[j];
if (nx < 0 || ny < 0 || nx >= MAX_NODE || ny >= MAX_NODE || visited[ny][nx] || map[ny][nx] == 1) {
continue;
}
que.push(make_pair(ny, nx));
visited[ny][nx] = 1;
}
}
}
return false;
}
int main()
{
for (int k = 1; k <= 10; k++) {
int n;
scanf("%d", &n);
for (int i = 0; i < MAX_NODE; i++) {
for (int j = 0; j < MAX_NODE; j++) {
char ch;
visited[i][j] = 0;
scanf(" %c", &ch);
map[i][j] = ch - '0';
if (map[i][j] == 2) {
beginX = j;
beginY = i;
}
else if (map[i][j] == 3) {
endX = j;
endY = i;
}
}
}
printf("#%d %d\n" ,n , bfs() ? 1 : 0);
}
}