Facebook
From Rr, 2 Months ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 214
  1. #include <fstream>
  2. using namespace std;
  3. ifstream fin("labirint.in");
  4. ofstream fout("labirint.out");
  5. int s[100][2], L[10][10], m,n,lin,col;
  6. int vizitat(int k, int l, int c)
  7. {
  8.     for(int i=1; i<=k; i++)
  9.         if(s[i][0]==l && s[i][1]==c)
  10.             return 1;
  11.     return 0;
  12. }
  13. void tipar(int k, int l, int c)
  14. {
  15.     for(int i=1; i<=k-1; i++)
  16.         fout<<s[i][0]<<" "<<s[i][1]<<endl;
  17.     if(l==0) fout<<"N"<<endl;
  18.     if(l==m+1) fout<<"S"<<endl;
  19.     if(c==0) fout<<"V"<<endl;
  20.     if(c==n+1) fout<<"E"<<endl;
  21. }
  22. void bkt(int k, int l, int c)
  23. {
  24.     if(l==0 || l==m+1 || c==0 || c==n+1)
  25.         tipar(k,l,c);
  26.     else
  27.     {
  28.         s[k][0]=l;
  29.         s[k][1]=c;
  30.         for(int i=1; i<=4; i++)
  31.             switch(i)
  32.             {
  33.             case 1:
  34.                 if(L[l][c]&8 && !vizitat(k,l-1,c))
  35.                     bkt(k+1,l-1,c);
  36.                 break;
  37.             case 2:
  38.                 if(L[l][c]&4 && !vizitat(k,l,c+1))
  39.                     bkt(k+1,l,c+1);
  40.                 break;
  41.             case 3:
  42.                 if(L[l][c]&2 && !vizitat(k,l+1,c))
  43.                     bkt(k+1,l+1,c);
  44.                 break;
  45.             case 4:
  46.                 if(L[l][c]&1 && !vizitat(k,l,c-1))
  47.                     bkt(k+1,l,c-1);
  48.                 break;
  49.             }
  50.     }
  51. }
  52. int main()
  53. {
  54.     int i,j;
  55.     fin>>m>>n;
  56.     for(i=1; i<=m; i++)
  57.         for(j=1; j<=n; j++)
  58.             fin>>L[i][j];
  59.     fin>>lin>>col;
  60.     bkt(1,lin,col);
  61.     return 0;
  62. }