(AtCoder Typical Contest 001 のA問題)
で再帰関数を使った解き方をしたのですがどうもうまくいきません。
どうしてもわからなくなったので他の方のコードをみたりしたのですが関数の呼び出しがfor文になっている、配列のゴール地点の座標を使って判定しているといったくらいでコードの違いに大きなところは見られませんでした。
自分が書いたコードは下記の通りです。
C
1#include <stdio.h> 2int h,w,res=0; 3int si,sj,gi,gj; 4char s[500][500]; 5int v[500][500]; 6 7void dfs(int x,int y){ 8 if(x==gi&&y==gj){ 9 res=1; 10 return; 11 } 12 if(x<0||x>=h||y<0||y>=w||s[x][y]=='#')return; 13 if(v[x][y])return; 14 15 v[x][y]=1; 16 17 dfs(x+1,y); 18 dfs(x-1,y); 19 dfs(x,y+1); 20 dfs(x,y-1); 21 return; 22} 23int main(void){ 24 scanf("%d %d",&h,&w); 25 26 for(int i=0;i<h;i++)scanf("%s",s[i]); 27 28 for(int i=0;i<h;i++){ 29 for(int j=0;j<w;j++){ 30 if(s[i][j]=='s'){ 31 si=i; 32 sj=j; 33 } 34 if(s[i][j]=='g'){ 35 gi=i; 36 gj=j; 37 } 38 } 39 } 40 dfs(si,sj); 41 if(res)puts("Yes"); 42 else puts("No"); 43 return 0; 44}
初歩的な質問で大変申し訳ないのですが何かご指摘などあればお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。