Path on a Grid
解いてみましたこの問題。
右の壁をつたってまたもとの位置にもどるというもの。
格子点をノードとしてグラフに置き換えてつたっていきました。
格子点を配列で用意。
int map[5][5][4];//0:R 1:U 2:L 3:D
データの入力処理
一行ずつもってきて
データの偶数行目は左右をつなげるように
データの奇数行目は上下をつなげるように処理
while(getline(cin,s)){ if(i%2==0){ for(int k=0;k<4;k++){ if(s[k]=='1'){ map[j][k][0]=1; map[j][k+1][2]=1; } } }else{ for(int k=0;k<5;k++){ if(s[k]=='1'){ map[j][k][3]=1; map[j+1][k][1]=1; } } j++; } if(i==8)break; i++; }
dirで向きを保存しつつ
ノードがつながっているかを調べ進む方向を調べる。
checkの戻り値が0右1上2左3下に進む。
ansに進んだ方向を記録しておき進んだ方向座標をずらす。
x=0y=0に戻ってきたときにループからでてansを表示。
int pos,dir=0,x=0,y=0,n=0; while(1){ pos=check(x,y,dir); if(pos==0){ ans[n]='R'; dir=0; x++; }else if(pos==1){ ans[n]='U'; dir=1; y--; }else if(pos==2){ ans[n]='L'; dir=2; x--; }else if(pos==3){ ans[n]='D'; dir=3; y++; }else{ break; } n++; if(x==0&&y==0)break; } for(int i=0;i<n;i++)cout<<ans[i]; cout<<endl; return 0; }
checkする順番を間違えなければacceptされるはず。
というかもっと簡単な方法あるのか。。。?