728x90
반응형
https://www.acmicpc.net/problem/2178
bfs를 사용하여 풀었고
생각해보니 visited를 안쓰고
if(graph[nx][ny] != 0 && visited[nx][ny]==false)
조건 대신
if(graph[nx][ny] == 1)
조건을 썼어도 됐을 것 같다
#include <bits/stdc++.h>
using namespace std;
int n,m;
int graph[101][101];
bool visited[101][101];
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
bool bfs(int x, int y){
queue<pair<int, int>> q;
q.push({x,y});
visited[x][y] = true;
while(!q.empty()){
int first = q.front().first;
int second = q.front().second;
q.pop();
for(int i=0; i<4; i++){
int nx = first + dx[i];
int ny = second + dy[i];
if(nx<=-1 || nx>=n || ny<=-1 || ny>=m) continue;
if(graph[nx][ny] != 0 && visited[nx][ny]==false){
graph[nx][ny] = graph[first][second] + 1;
q.push({nx, ny});
visited[nx][ny] = true;
}
}
}
return true;
}
int main(void) {
cin >> n >> m;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
scanf("%1d", &graph[i][j]);
}
}
bfs(0,0);
cout << graph[n-1][m-1];
return 0;
}
비슷한 문제
https://develop-me-z.tistory.com/99
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준/DP/C++] 1699번 제곱수의합 (0) | 2022.12.31 |
---|---|
[백준/DP/C++] 2579번 계단 오르기 (0) | 2022.12.30 |
[백준/DFS/C++] 4963번 섬의 개수 (0) | 2022.12.30 |
[백준/구현/C++] 2331번 반복수열 (0) | 2022.12.29 |
[백준/DP/C++] 11055번 가장 큰 증가 부분 수열 (0) | 2022.12.29 |