Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int h, w, len = -1, ip = -99, jp = -99;
- int a[2002][2002];
- pair<bool,int> vis[2002][2002];
- void visita (int i, int j)
- {
- len++;
- if (vis[i][j].first){
- cout << len + vis[i][j].second;
- exit(0);
- }
- vis[i][j].first = 1;
- vis[i][j].second = len;
- int imin, jmin, mini;
- bool esiste = 0;
- if (a[i-1][j] != -1 && (ip != i-1 || jp != j)){
- esiste = 1;
- imin = i-1;
- jmin = j;
- mini = abs(a[i][j] - a[i-1][j]);
- }
- if (a[i+1][j] != -1 && (ip != i+1 || jp != j)){
- if (!esiste){
- esiste = 1;
- imin = i+1;
- jmin = j;
- mini = abs(a[i][j] - a[i+1][j]);
- } else{
- if (abs(a[i][j] - a[i+1][j]) < mini){
- mini = abs(a[i][j] - a[i+1][j]);
- imin = i+1;
- jmin = j;
- } else if (abs(a[i][j] - a[i+1][j]) < mini){
- if (a[i+1][j] < a[imin][jmin]){
- imin = i+1;
- jmin = j;
- }
- }
- }
- }
- if (a[i][j-1] != -1 && (ip != i || jp != j-1)){
- if (!esiste){
- esiste = 1;
- imin = i;
- jmin = j-1;
- mini = abs(a[i][j] - a[i][j-1]);
- } else{
- if (abs(a[i][j] - a[i][j-1]) < mini){
- mini = abs(a[i][j] - a[i][j-1]);
- imin = i;
- jmin = j-1;
- } else if (abs(a[i][j] - a[i][j-1]) < mini){
- if (a[i][j-1] < a[imin][jmin]){
- imin = i;
- jmin = j-1;
- }
- }
- }
- }
- if (a[i][j+1] != -1 && (ip != i || jp != j+1)){
- if (abs(a[i][j] - a[i][j+1]) < mini){
- mini = abs(a[i][j] - a[i][j+1]);
- imin = i;
- jmin = j+1;
- } else if (abs(a[i][j] - a[i][j+1]) < mini){
- if (a[i][j+1] < a[imin][jmin]){
- imin = i;
- jmin = j+1;
- }
- }
- }
- ip = i, jp = j;
- visita(imin, jmin);
- }
- int main()
- {
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- ios_base::sync_with_stdio(!!false);
- cin >> h >> w;
- if(h==1 && w==1){
- cout << 0;
- return 0;
- }
- for (int i=1; i<=h; i++)
- for (int j=1; j<=w; j++)
- cin >> a[i][j];
- for (int i=0; i<=h+1; i++){
- a[i][0] = -1;
- a[i][w+1] = -1;
- }
- for (int i=0; i<=w+1; i++){
- a[0][i] = -1;
- a[h+1][i] = -1;
- }
- visita(1,1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement