Advertisement
a53

mr

a53
Jan 9th, 2017
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3. ifstream cin("mr.in");
  4. ofstream cout("mr.out");
  5. int cost, minim[105][105],linii,coloane,j,i,matrice[105][105],teleportere,coada_i[10000],coada_j[10000],in,sf,iul,jul;
  6. int pereche[1005][1005],cat;
  7. int dir_i[]={0,-1,0,1,0};
  8. int dir_j[]={0,0,1,0,-1};
  9.  
  10. struct copac
  11. {
  12. int li,ci,ls,cs;
  13. } teleporter[1005];
  14.  
  15. int main()
  16. {
  17. cin>>linii>>coloane;
  18. for(i=1;i<=linii;i++)
  19. {
  20. for(j=1;j<=coloane;j++)
  21. {
  22. cin>>matrice[i][j];
  23. if(matrice[i][j]==0)
  24. matrice[i][j]=1;
  25. }
  26. }
  27. for(i=0;i<=linii+1;i++)
  28. {
  29. matrice[i][0]=-1;
  30. matrice[i][coloane+1]=-1;
  31. }
  32. for(i=0;i<=coloane+1;i++)
  33. {
  34. matrice[0][i]=-1;
  35. matrice[linii+1][i]=-1;
  36. }
  37.  
  38. cin>>teleportere;
  39. for(i=1;i<=teleportere;i++)
  40. {
  41. cin>>teleporter[i].li>>teleporter[i].ci>>teleporter[i].ls>>teleporter[i].cs;
  42. pereche[teleporter[i].li][teleporter[i].ci]=i;
  43. pereche[teleporter[i].ls][teleporter[i].cs]=i;
  44. }
  45.  
  46. coada_i[1]=1;
  47. coada_j[1]=1;
  48. minim[1][1]=matrice[1][1];
  49. in=1;
  50. sf=1;
  51. while(in<=sf)
  52. {
  53. for(j=1;j<=4;j++)
  54. {
  55. iul=coada_i[in]+dir_i[j];
  56. jul=coada_j[in]+dir_j[j];
  57. if(matrice[iul][jul]!=-1)
  58. {
  59. cost=minim[coada_i[in]][coada_j[in]]+matrice[iul][jul];
  60. if(minim[iul][jul]==0||minim[iul][jul]>cost)
  61. {
  62. minim[iul][jul]=cost;
  63. sf++;
  64. coada_i[sf]=iul;
  65. coada_j[sf]=jul;
  66. }
  67. }
  68. }
  69. cat=pereche[coada_i[in]][coada_j[in]];
  70. if(cat!=0)
  71. {
  72. if(coada_i[in]!=teleporter[cat].li||coada_j[in]!=teleporter[cat].ci)
  73. {
  74. iul=teleporter[cat].li;
  75. jul=teleporter[cat].ci;
  76. }
  77. else
  78. {
  79. iul=teleporter[cat].ls;
  80. jul=teleporter[cat].cs;
  81. }
  82. cost=minim[coada_i[in]][coada_j[in]]+1;
  83. if(cost<=minim[iul][jul]||minim[iul][jul]==0)
  84. {
  85. minim[iul][jul]=cost;
  86. sf++;
  87. coada_i[sf]=iul;
  88. coada_j[sf]=jul;
  89. }
  90. }
  91. in++;
  92. }
  93. cout<<minim[linii][coloane]-1;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement