- μ΄ κΈμ c++λ‘ νμ΄λ₯Ό μμ±νμμ΅λλ€.
λ¬Έμ
μμ
νμ΄
- BFS νΉμ§ μ€ νλλ νμνλ μμμ μ΅μνμ κ±°λ¦¬λ‘ νμνλ€λ νΉμ§μ΄ μμ΅λλ€.
- λ°λΌμ BFS μκ³ λ¦¬μ¦μΌλ‘ μνλ 곡κ°μ μ²μμΌλ‘ νμνλ μκ°μ΄ μ΅λ¨κ±°λ¦¬ μ
λλ€.
#include<iostream>
#include<queue>
#include<utility>
#include<algorithm>
#include<string>
using namespace std;
int n,m;
int arr[100][100];
int dist[100][100];
int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
bool inside(int y,int x){
return 0<=y && y<n && 0<=x && x<m;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++){
string s;
cin>>s;
for(int j=0;j<m;j++){
arr[i][j] = s[j] - '0';
}
}
queue<pair<int,int>> q;
q.push({0,0});
dist[0][0] = 1;
while(!q.empty()){
int y = q.front().first;
int x = q.front().second;
q.pop();
for(int i=0;i<4;i++){
int dy = y + dir[i][0];
int dx = x + dir[i][1];
if(inside(dy,dx) && arr[dy][dx] && dist[dy][dx] == 0){
q.push({dy,dx});
dist[dy][dx] = dist[y][x] + 1;
}
}
}
cout<<dist[n-1][m-1];
}
- μΆκ°λ‘ κΆκΈν μ μ΄λ μμ ν λΆλΆμ΄ μμΌλ©΄ λκΈλ‘ λ¨κ²¨μ£ΌμΈμ.