AtCoder Typical Contest001の問題Aの際に解けない問題がありました。
コンテスト終了後ほかの方のコードを拝見しますと、わからない箇所がありました。
コンテスト中に解けた範囲の(sample testは通りました)ものに訂正をして通せましたが
理解しきれていません。
#include <bits/stdc++.h>
using namespace std;
int W,H;
int sx,sy,gx,gy;
string line;
char maze[600][600];
bool reached[600][600]={0};
void search(int x,int y,char maze[][600]){
if(x<0||W <= x || y<0||H<=y||maze[x][y]=='#') return;
if(reached[x][y]) return;
reached[x][y] =1;
search(x+1,y,maze);
search(x-1,y,maze);
search(x,y+1,maze);
search(x,y-1,maze);
}
int main(){
//Hは縦Wは横
cin>>H>>W;
//迷路読み込みsはスタートgはゴール
getchar();//ここと
for(int i=0;i<H;i++){
for(int j=0;j<W;j++){
scanf("%c",&maze[j][i]);
if(maze[j][i]=='s'){
sx=j;
sy=i;
}else if(maze[j][i]=='g'){
gx=j;
gy=i;
}
} getchar();//ここです。
}
search(sx, sy,maze);//DFS
if(reached[gx][gy]==1){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
つたないコードですが、よろしくお願いします。
ちなみに、getchar();なしでもsample testはとおりました。(たまたまかもしれませんが)