Path on a Grid

解いてみましたこの問題。
右の壁をつたってまたもとの位置にもどるというもの。

http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/problem.jsp?vol=0&id=0037&tle=1&mle=32768&title=Path%20on%20a%20Grid&doc=1&lang=jp

格子点をノードとしてグラフに置き換えてつたっていきました。
格子点を配列で用意。

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されるはず。
というかもっと簡単な方法あるのか。。。?