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;
}