由题意可知,需要找出最长的线路,所以要从每个点出发,搜索所有满足条件的线路,即深搜
代码如下:
#include<iostream>
#include<cstdlib>
#include<cstring>
#define MAX 105
using namespace std;
int map[MAX][MAX];
int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};
int Max,r,c;//Max用于存储最长的路线
void dfs(int x,int y,int count){
int x_1,y_1;
if(count>Max)
Max=count;
for(int i=0;i<4;i++){
x_1=x+dir[i][0];
y_1=y+dir[i][1];
if(x_1>0 && y_1>0 && x_1<=r &&y_1<=c && map[x_1][y_1]< map[x][y] && map[x_1][y_1]!=-1)//能继续深搜的条件
dfs(x_1,y_1,count+1);
}
}
int main(){
int n,result;
cin>>n;
while(n--){
memset(map,-1,sizeof(map));
cin>>r>>c;
result=0;
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
cin>>map[i][j];
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++){//依次查找满足条件的路线
Max=0;
dfs(i,j,1);
if(Max>result)
result=Max;
}
cout<<result<<endl;
}
system("pause");
return 0;
}