fork download
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll long long
  6. #define pb push_back
  7. #define F(i,a,b) for(int i=a, i<b, i++)
  8. #define MOD 1000000007
  9.  
  10. int n, a[100][100];
  11. vector<string> v;
  12. bool vs[100][100];
  13.  
  14. void Try(int i, int j, string s){
  15. if(a[1][1] == 0 || a[n][n] == 0) return;
  16. if(i == n && j == n){
  17. v.pb(s);
  18. return;
  19. }
  20. if(i!=n && a[i+1][j]==1 && !vs[i+1][j]){
  21. vs[i][j] = true;
  22. Try(i+1,j,s+"D");
  23. vs[i][j] = false;
  24. }
  25. if(j!=n && a[i][j+1]==1 && !vs[i][j+1]){
  26. vs[i][j] = true;
  27. Try(i,j+1,s+"R");
  28. vs[i][j] = false;
  29. }
  30. if(i!=n && a[i-1][j]==1 && !vs[i-1][j]){
  31. vs[i][j] = true;
  32. Try(i-1,j,s+"U");
  33. vs[i][j] = false;
  34. }
  35. if(j!=n && a[i][j-1]==1 && !vs[i][j-1]){
  36. vs[i][j] = true;
  37. Try(i,j-1,s+"L");
  38. vs[i][j] = false;
  39. }
  40. }
  41.  
  42. int main(){
  43. int t = 1; cin >> t;
  44. while(t--){
  45. v.clear();
  46. cin >> n;
  47. for(int i=1; i<=n; i++){
  48. for(int j=1; j<=n; j++){
  49. cin >> a[i][j];
  50. vs[i][j] = false;
  51. }
  52. }
  53.  
  54. Try(1,1,"");
  55. if(v.empty()) cout << "-1";
  56. else{
  57. sort(v.begin(), v.end());
  58. for(auto x : v) cout << x << " ";
  59. }
  60. cout << endl;
  61. }
  62. return 0;
  63. }
  64.  
Success #stdin #stdout 0.01s 5320KB
stdin
3
4
1 0 0 0

1 1 0 1

0 1 0 0

0 1 1 1
4
1 0 0 0

1 1 0 1

1 1 0 0

0 1 1 1

5

1 0 0 0 0

1 1 1 1 1

1 1 1 0 1

0 0 0 0 1

0 0 0 0 1
stdout
DRDDRR 
DDRDRR DRDDRR 
DDRRURRDDD DDRURRRDDD DRDRURRDDD DRRRRDDD