求有向图上的最长路径长度。
#include<iostream>
#include<cstring>
#define maxn 120
using namespace std;
int d[maxn][maxn],h[maxn][maxn];
int n,m;
int dx[]={
1,-1,0,0
};
int dy[]={
0,0,1,-1
};
int dfs(int x,int y)
{
if(d[x][y])return d[x][y];
int temp;
int mix=1;
for(int i=0;i<4;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(nx<1||nx>n||ny<1||ny>m)continue;
if(h[x][y]>h[nx][ny])
{
temp=dfs(nx,ny)+1;
mix=max(temp,mix);
}
}
return d[x][y]=mix;
}
void slove()
{
int temp,ans=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
temp=dfs(i,j);
if(temp>ans)
{
ans=temp;
}
}
}
cout<<ans<<endl;
}
int main()
{
while(cin>>n>>m)
{
memset(d,0,sizeof(d));
memset(h,0,sizeof(h));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>h[i][j];
}
slove();
}
return 0;
}