Official
C - 迷路の最短経路 / Shortest Path in a Maze Editorial
by
C - 迷路の最短経路 / Shortest Path in a Maze Editorial
by
physics0523
この問題は、典型的なグリッド迷路の問題です。
幅優先探索によりこの問題に正解できます。
この問題では外周に壁が敷き詰められていないため、実装の際は範囲外参照に注意してください。
実装例 (C++):
#include<bits/stdc++.h>
using namespace std;
using pi=pair<int,int>;
int dx4[4]={0,0,-1,1};
int dy4[4]={-1,1,0,0};
int N;
bool inside(pi x){
return (0<=x.first && x.first<N && 0<=x.second && x.second<N);
}
int main(){
cin >> N;
vector<string> c(N);
pi S,G;
for(int i=0;i<N;i++){
cin >> c[i];
for(int j=0;j<N;j++){
if(c[i][j]=='S'){S={i,j};}
if(c[i][j]=='G'){G={i,j};}
}
}
vector<vector<int>> d(N,vector<int>(N,1e9));
queue<pi> q;
d[S.first][S.second]=1;
q.push(S);
while(!q.empty()){
auto od=q.front(); q.pop();
if(od==G){
cout << d[od.first][od.second] << "\n";
return 0;
}
for(int k=0;k<4;k++){
pi tg={od.first+dx4[k],od.second+dy4[k]};
if(!inside(tg)){continue;}
if(c[tg.first][tg.second]=='#'){continue;}
if(d[tg.first][tg.second]>5e8){
d[tg.first][tg.second]=d[od.first][od.second]+1;
q.push(tg);
}
}
}
return 0;
}
posted:
last update:
