Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int NMAX=501;
- int dy[4]={0, 0, -1, 1};
- int dx[4]={-1, 1, 0, 0};
- ifstream fin("rover.in");
- ofstream fout("rover.out");
- queue <pair <int , int> > Q;
- int H[NMAX][NMAX], Lee[NMAX][NMAX];
- int N, cerinta, G;
- bool OK(int i, int j){
- if(i < 0 || j < 0 || i >= N || j >= N){
- return false;
- }
- return true;
- }
- int read(){
- fin >> cerinta >> N;
- if(cerinta==1){
- fin >> G;
- }
- for(int i = 0; i < N; i++){
- for(int j=0; j<N; j++){
- fin >> H[i][j];
- }
- }
- if (cerinta==1)
- for (int i = 0; i < N; i++) {
- for (int j = 0; j < N; j++) {
- Lee[i][j] = INT_MAX;
- }
- }
- }
- int lee_rez_1(){
- int i, j, i_1, j_1;
- Lee[0][0]=0;
- Q.push(make_pair(0, 0));
- while(!Q.empty()){
- i = Q.front().first;
- j = Q.front().second;
- Q.pop();
- for(int d=0; d<4; d++){
- i_1 = i + dy[d];
- j_1 = j + dx[d];
- if(OK(i_1, j_1)){
- if (Lee[i][j] + (G > H[i_1][j_1] ? 1 : 0) < Lee[i_1][j_1]) {
- Lee[i_1][j_1] = Lee[i][j] + (G > H[i_1][j_1] ? 1 : 0);
- Q.push(make_pair(i_1, j_1));
- }
- }
- }
- }
- }
- int lee_rez_2(){
- int i, j, i_1, j_1;
- Lee[0][0]=H[0][0];
- Q.push(make_pair(0, 0));
- while(!Q.empty()){
- i = Q.front().first;
- j = Q.front().second;
- for(int d=0; d<4; d++){
- i_1 = i + dy[d];
- j_1 = j + dx[d];
- if(OK(i_1, j_1)){
- if(!Lee[i_1][j_1]){
- if(H[i_1][j_1]<Lee[i][j]){
- Lee[i_1][j_1]=H[i_1][j_1];
- } else {
- Lee[i_1][j_1]=Lee[i][j];
- }
- Q.push(make_pair(i_1, j_1));
- } else if(H[i_1][j_1]>=Lee[i][j] && Lee[i_1][j_1]<Lee[i][j]){
- Lee[i_1][j_1]=Lee[i][j];
- Q.push(make_pair(i_1, j_1));
- }
- }
- }
- Q.pop();
- }
- }
- int main() {
- read();
- if(cerinta==1){
- lee_rez_1();
- fout << Lee[N-1][N-1];
- } else {
- lee_rez_2();
- fout << Lee[N-1][N-1];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment