一个if语句放置的位置不同,结果也不相同

P1434 [SHOI2002] 滑雪

Xiaodengzi @ 2022-10-03 23:24:37

代码中有两个(一个已经注释起来了)

if(f[x][y]>result)result = f[x][y];

我感觉这个if语句放在这两个地方都可以,但结果不同。不知道是什么特殊情况没考虑到。。。大佬们帮帮忙

#include <iostream>
#include <algorithm>
using namespace std;

const int N = 220;
int d[N][N],f[N][N];//d是接受的数据,f是dfs过程存储的数据
int r,c;//长,宽
int dx[4] = {-1,0,1,0},dy[4] = {0,-1,0,1};
int result = -1e9;

void dfs(int x,int y){
    if(f[x][y])return;
    f[x][y] = 1;

    for(int i=0;i<4;i++){
        int xx = x+dx[i];
        int yy = y+dy[i];

        if(xx>0&&xx<=r&&yy>0&&yy<=c&&d[x][y]>d[xx][yy]){
            dfs(xx,yy);
            f[x][y] = max(f[x][y],f[xx][yy]+1);
//          if(f[x][y]>result)result = f[x][y];//if语句放在这里会有2个WA
        }   
    }
    if(f[x][y]>result)result = f[x][y];//if语句放在这里可以过
    return;
}

int main(){

    cin>>r>>c;
    for(int i=1;i<=r;i++)
        for(int j=1;j<=c;j++)
            cin>>d[i][j];

    for(int i=1;i<=r;i++)
        for(int j=1;j<=c;j++)
            dfs(i,j);

    cout<<result;

    return 0;
} 

|