作者:我是王健值得信赖 | 来源:互联网 | 2023-05-17 11:36
以每一点为起点找出所有路径,并求出以此点做为起点的最大路径求出每个点的最大路径后再找出其中最大的值,输出最大值#include<stdio.h>#include<string.h
以每一点为起点找出所有路径,并求出以此点做为起点的最大路径
求出每个点的最大路径后再找出其中最大的值,输出最大值
#include
#include
#include
#include
#define N 101
using namespace std;
int Hang ,Lie;
int dir[4][2]= {{-1,0},{0,-1},{1,0},{0,1}};//定义四个方向
int len[N][N],map1[N][N];
int dp(int i,int j)
{
if(len[i][j]!=0)return len[i][j];//当前坡度的长度
int s,max1=0;
for(int t=0; t<4; t++)
{
int sx=i+dir[t][0];
int sy=j+dir[t][1];
if(sx>=0&&sx=0&&sy {
s=dp(sx,sy);//计算以此位置开始的某一条路径的坡度
if(s>max1)max1=s;//找出最大的
}
}
len[i][j]=max1+1;
return max1+1;
}
int main()
{
while(~scanf("%d%d",&Hang,&Lie))
{
memset(len,0,sizeof(len));
for(int i=0; i for(int j=0; j scanf("%d",&map1[i][j]);
int max2=-1;
for(int i=0; i for(int j=0; j {
len[i][j]=dp(i,j);//计算以任意点为起点的最大长度
if(len[i][j]>max2)max2=len[i][j];//再找出最大长度
}
printf("%d\n",max2);
}
}