Advertisement
a53

labirint3

a53
Feb 9th, 2020
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.49 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define NMAX 1010
  3. using namespace std;
  4.  
  5. ifstream fin("labirint.in");
  6. ofstream fout("labirint.out");
  7.  
  8. char L[NMAX][NMAX];
  9. int DA[NMAX][NMAX], DC[NMAX][NMAX];
  10. bool VIZ[NMAX][NMAX],gasit;
  11. int dl[]= {-1,0,1,0};
  12. int dc[]= {0,1,0,-1};
  13.  
  14. struct poz
  15. {
  16. int l,c;
  17. };
  18. poz C1[NMAX*NMAX], C2[NMAX*NMAX];
  19. int n,m;
  20.  
  21. int main()
  22. {
  23. int i,j,k,pa,ua,pc,uc,d1,d2=1000000;
  24. poz x,v;
  25. pa=ua=0;
  26. pc=uc=0;
  27. gasit=false;
  28.  
  29. //citire si creare cozi
  30. fin>>n>>m;
  31. for(i=1; i<=n; i++)
  32. for(j=1; j<=m; j++)
  33. {
  34. fin>>L[i][j];
  35. if(L[i][j]=='A')
  36. {
  37. DA[i][j]=1;
  38. C1[ua].l=i;
  39. C1[ua].c=j;
  40. ua++;
  41. }
  42. else if(L[i][j]=='C')
  43. {
  44. DC[i][j]=1;
  45. C2[uc].l=i;
  46. C2[uc].c=j;
  47. uc++;
  48. }
  49. }
  50.  
  51.  
  52. //bordare
  53. for (i=0; i<=m+1; i++) DA[0][i]=DA[n+1][i]=-1;
  54. for (i=0; i<=n+1; i++) DA[i][0]=DA[i][m+1]=-1;
  55. for (i=0; i<=m+1; i++) DC[0][i]=DC[n+1][i]=-1;
  56. for (i=0; i<=n+1; i++) DC[i][0]=DC[i][m+1]=-1;
  57.  
  58. //rezolvare
  59. while ((pa<ua || pc<uc) && gasit==false)
  60. {
  61. if(pa<ua){
  62. x=C1[pa];
  63. pa++;
  64. for (k=0; k<4; k++)
  65. {
  66. v.l=x.l+dl[k];
  67. v.c=x.c+dc[k];
  68.  
  69. if (DA[v.l][v.c]==0 && L[v.l][v.c]!='Z')
  70. {
  71. DA[v.l][v.c]=DA[x.l][x.c]+1;
  72.  
  73. C1[ua]=v;ua++;
  74. if(L[v.l][v.c]=='B')
  75. {
  76. if (VIZ[v.l][v.c]==false)
  77. {VIZ[v.l][v.c]=true;}
  78. else
  79. {d1=DA[v.l][v.c]+DC[v.l][v.c]; if(d1<d2) d2=d1; cout<<d1<<"\n";}
  80. }
  81.  
  82. }
  83. }
  84. }
  85. if(pc<uc){
  86. x=C2[pc];
  87. pc++;
  88. for (k=0; k<4; k++)
  89. {
  90. v.l=x.l+dl[k];
  91. v.c=x.c+dc[k];
  92.  
  93. if (DC[v.l][v.c]==0 && L[v.l][v.c]!='Z')
  94. {
  95. DC[v.l][v.c]=DC[x.l][x.c]+1;
  96.  
  97. C2[uc]=v;uc++;
  98. if(L[v.l][v.c]=='B')
  99. {
  100.  
  101. if (VIZ[v.l][v.c]==false)
  102. VIZ[v.l][v.c]=true;
  103. else
  104. {d1=DC[v.l][v.c]+DA[v.l][v.c];if(d1<d2) d2=d1;cout<<d1<<"\n";}
  105. }
  106.  
  107. }
  108. }
  109. }
  110.  
  111. }
  112.  
  113. fout<<d2-1<<endl;
  114. fout.close();
  115.  
  116. return 0;
  117.  
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement