#include <stdlib.h>
#define maxn 101
int f[maxn][maxn],a[maxn][maxn],b[10002][3];
int max1(int a,int b)
{
if(a>b) return a;
else return b;
}
int sort(int n)
{
int i,j,temp;
int flag=0;
for(i=0;i<n-1;i++)
{
for(j=n-2;j>=i;j--)
if(b[j][0]>b[j+1][0])
{
temp=b[j][0];
b[j][0]=b[j+1][0];
b[j+1][0]=temp;
temp=b[j][1];
b[j][1]=b[j+1][1];
b[j+1][1]=temp;
temp=b[j][2];
b[j][2]=b[j+1][2];
b[j+1][2]=temp;
flag=1;
}
if(flag==0) break;
else flag=0;
}
}
int main()
{
int r,c;
int i,j,ans=0,temp,total=0;
scanf("%d %d",&r,&c);
for(i=0;i<r;i++)
for(j=0;j<c;j++)
{
scanf("%d",&a[i][j]);
b[total][0]=a[i][j];
b[total][1]=i;
b[total][2]=j;
total++;
f[i][j]=1;
}
sort(total);
// memset(f,0,sizeof(f));
for(i=total;i>=0;i--)
{
if(a[b[i][1]-1][b[i][2]]<a[b[i][1]][b[i][2]])
f[b[i][1]-1][b[i][2]]=max1(f[b[i][1]-1][b[i][2]],f[b[i][1]][b[i][2]]+1);
if(a[b[i][1]+1][b[i][2]]<a[b[i][1]][b[i][2]])
f[b[i][1]+1][b[i][2]]=max1(f[b[i][1]+1][b[i][2]],f[b[i][1]][b[i][2]]+1);
if(a[b[i][1]][b[i][2]-1]<a[b[i][1]][b[i][2]])
f[b[i][1]][b[i][2]-1]=max1(f[b[i][1]][b[i][2]-1],f[b[i][1]][b[i][2]]+1);
if(a[b[i][1]][b[i][2]+1]<a[b[i][1]][b[i][2]])
f[b[i][1]][b[i][2]+1]=max1(f[b[i][1]][b[i][2]+1],f[b[i][1]][b[i][2]]+1);
}
for(i=0;i<r;i++)
for(j=0;j<c;j++)
if(f[i][j]>ans) ans=f[i][j];
printf("%d\n",ans);
system("Pause");
return 0;
}
是否感觉这代码很魂淡