yoyoboyss

Untitled

Feb 13th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.31 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int NMAX=501;
  5.  
  6. int dy[4]={0, 0, -1, 1};
  7. int dx[4]={-1, 1, 0, 0};
  8.  
  9. ifstream fin("rover.in");
  10. ofstream fout("rover.out");
  11. queue <pair <int , int> > Q;
  12.  
  13. int H[NMAX][NMAX], Lee[NMAX][NMAX];
  14. int N, cerinta, G;
  15.  
  16.  
  17. bool OK(int i, int j){
  18. if(i < 0 || j < 0 || i >= N || j >= N){
  19. return false;
  20. }
  21. return true;
  22. }
  23.  
  24. int read(){
  25. fin >> cerinta >> N;
  26. if(cerinta==1){
  27. fin >> G;
  28. }
  29. for(int i = 0; i < N; i++){
  30. for(int j=0; j<N; j++){
  31. fin >> H[i][j];
  32. }
  33. }
  34.  
  35. if (cerinta==1)
  36. for (int i = 0; i < N; i++) {
  37. for (int j = 0; j < N; j++) {
  38. Lee[i][j] = INT_MAX;
  39. }
  40. }
  41. }
  42.  
  43. int lee_rez_1(){
  44. int i, j, i_1, j_1;
  45. Lee[0][0]=0;
  46. Q.push(make_pair(0, 0));
  47. while(!Q.empty()){
  48. i = Q.front().first;
  49. j = Q.front().second;
  50. Q.pop();
  51.  
  52. for(int d=0; d<4; d++){
  53. i_1 = i + dy[d];
  54. j_1 = j + dx[d];
  55. if(OK(i_1, j_1)){
  56. if (Lee[i][j] + (G > H[i_1][j_1] ? 1 : 0) < Lee[i_1][j_1]) {
  57. Lee[i_1][j_1] = Lee[i][j] + (G > H[i_1][j_1] ? 1 : 0);
  58. Q.push(make_pair(i_1, j_1));
  59. }
  60. }
  61. }
  62. }
  63. }
  64.  
  65. int lee_rez_2(){
  66. int i, j, i_1, j_1;
  67. Lee[0][0]=H[0][0];
  68. Q.push(make_pair(0, 0));
  69. while(!Q.empty()){
  70. i = Q.front().first;
  71. j = Q.front().second;
  72. for(int d=0; d<4; d++){
  73. i_1 = i + dy[d];
  74. j_1 = j + dx[d];
  75. if(OK(i_1, j_1)){
  76. if(!Lee[i_1][j_1]){
  77. if(H[i_1][j_1]<Lee[i][j]){
  78. Lee[i_1][j_1]=H[i_1][j_1];
  79. } else {
  80. Lee[i_1][j_1]=Lee[i][j];
  81. }
  82. Q.push(make_pair(i_1, j_1));
  83. } else if(H[i_1][j_1]>=Lee[i][j] && Lee[i_1][j_1]<Lee[i][j]){
  84. Lee[i_1][j_1]=Lee[i][j];
  85. Q.push(make_pair(i_1, j_1));
  86. }
  87. }
  88. }
  89. Q.pop();
  90. }
  91. }
  92.  
  93. int main() {
  94. read();
  95. if(cerinta==1){
  96. lee_rez_1();
  97. fout << Lee[N-1][N-1];
  98. } else {
  99. lee_rez_2();
  100. fout << Lee[N-1][N-1];
  101. }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment