一道想用深度优先搜索的题,帮忙看下这个错误是为什么?
题目大意:给出一个整形二维数组(行数为n,列数为m),可以从其中任意一点出发,向前后左右移动,但是每次只能移向元素值更大的位置,求最多能移动的步数。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int f(int i,int j,int **a,int **s,int n,int m){
int n1=0,n2=0,n3=0,n4=0,max1,max2,max;
if(s[i][j]!=-1) return s[i][j];
if(i+1<n && a[i][j]<a[i+1][j]) n1=f(i+1,j,a,s,n,m)+1;
if(i-1>=0 && a[i][j]<a[i-1][j]) n2=f(i-1,j,a,s,n,m)+1;
if(j+1<m && a[i][j]<a[i][j+1]) n3=f(i,j+1,a,s,n,m)+1;
if(j-1>=0 && a[i][j]<a[i][j-1]) n4=f(i,j-1,a,s,n,m)+1;
max1=(n1>n2)?n1:n2;
max2=(n>n4)?n3:n4;
max=(max1>max2)?max1:max2;
s[i][j]=max;
return s[i][j];
}
int main(void){
int T,n,m,i,j,k,maxvalue,a[1000][1000],s[1000][1000];
scanf("%d",&T);
while(T--){
scanf("%d %d",&n,&m);
for(i=0;i<n;i++){
for(j=0;j<m;j++){
scanf("%d",&a[i][j]);
}
}
maxvalue=0;
memset(s,-1,sizeof(s));
for(i=0;i<n;i++){
for(j=0;j<m;j++){
k=f(i,j,a,s,n,m); /*这里有错误,求大佬解释下[Error] cannot convert 'int (*)[1000]' to 'int**' for argument
'3' to 'int f(int, int, int**, int**, int, int)' */
if(s[i][j]>maxvalue) maxvalue=s[i][j];
}
}
printf("%d\n",maxvalue);
}
return 0;
}
感觉这个程序有点繁琐,希望大佬可以顺便帮忙优化