Advertisement
a53

Barlog_of

a53
Feb 19th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. //Em. Cerchez
  2. #include <fstream>
  3. #include <cstring>
  4. #define NMAX 104
  5. #define INF (NMAX * NMAX +10)
  6. #define LGMAX 21
  7. #define ND 4
  8.  
  9. using namespace std;
  10. ifstream fin("barlog.in");
  11. ofstream fout("barlog.out");
  12. struct poz {int lin, col;};
  13. int dl[]={-1,0,1, 0};
  14. int dc[]={ 0,1,0,-1};
  15. char b[NMAX][NMAX][LGMAX];
  16. int d[NMAX][NMAX];
  17. int n, m;
  18. char cuv[LGMAX];
  19.  
  20. poz start;
  21. poz C[NMAX*NMAX];
  22. int prim, ultim;
  23. int cerinta;
  24. int rez[2]={1,INF};
  25.  
  26. void citire();
  27. void bordare();
  28. void rezolvare();
  29. bool trece(char cuv[], char s[]);
  30. int main()
  31. {
  32. citire();
  33. bordare();
  34. rezolvare();
  35. fout<<rez[cerinta]<<'\n';
  36. fout.close();
  37. return 0;
  38. }
  39.  
  40. void citire()
  41. {int i, j;
  42. fin>>cerinta>>n>>m;
  43. for (i=1; i<=n; i++)
  44. for (j=1; j<=m; j++) fin>>b[i][j];
  45. fin>>start.lin>>start.col>>cuv;
  46. cerinta--;
  47. }
  48.  
  49. void rezolvare()
  50. {poz p;
  51. int k;
  52. d[start.lin][start.col]=1;
  53. C[0]=start; prim=ultim=0;
  54. while (prim<=ultim)
  55. {
  56. p=C[prim++];
  57. if (trece(cuv,b[p.lin][p.col]))
  58. for (k=0; k<ND; k++)
  59. if (d[p.lin+dl[k]][p.col+dc[k]]==0)
  60. {d[p.lin+dl[k]][p.col+dc[k]]=1+d[p.lin][p.col];
  61. rez[0]++;
  62. ++ultim; C[ultim].lin=p.lin+dl[k]; C[ultim].col=p.col+dc[k];
  63. }
  64. else
  65. if (d[p.lin+dl[k]][p.col+dc[k]]==-1 && rez[1]==INF)
  66. rez[1]=d[p.lin][p.col];
  67.  
  68. }
  69. }
  70.  
  71. bool trece(char cuv[], char s[])
  72. {int i;
  73. char *p=cuv;
  74. for (i=0; s[i]; i++)
  75. {p=strchr(p,s[i]);
  76. if (p) p++;
  77. else return 0;
  78. }
  79. return 1;
  80. }
  81.  
  82. void bordare()
  83. {int i;
  84. for (i=0; i<=m+1; i++) d[0][i]=d[n+1][i]=-1;
  85. for (i=0; i<=n+1; i++) d[i][0]=d[i][m+1]=-1;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement