#include<iostream>
#include<cstdio>
using namespace std;
int a[1001][1001],b[1001][1001];//a数组表示这个位置的高度,b数组表示不论从哪一点到此点后所能行走的最大步数。
int search(int x,int y,int s)//x,y表示此点位置,s表示从最初点到此点的步数
{
s++;//走一步先加一
// cout<<x<<" "<<y<<" "<<s<<endl;
if(a[x][y]<a[x][y-1]&&y>1)//以下为通俗的四步走~~只有大神才会用~~
{
if(s>b[x][y-1]) //判断此点的步数是否大于以前来过的点,如果小于的话,直接就略过就行,如果大于的话,更新此点最大步数,并搜索下一个点,以下三步都是如此。
{
b[x][y-1]=s;
search(x,y-1,s);
}
}
if(a[x][y]<a[x][y+1]&&y<100)
{
if(s>b[x][y+1])
{
b[x][y+1]=s;
search(x,y+1,s);
}
}
if(a[x][y]<a[x-1][y]&&x>1)
{
if(s>b[x-1][y])
{
b[x-1][y]=s;
search(x-1,y,s);
}
}
if(a[x][y]<a[x+1][y]&&x<100)
{
if(s>b[x+1][y])
{
b[x+1][y]=s;
search(x+1,y,s);}
}
}
int main()
{
int n,m,p=0;
cin>>n>>m;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
scanf("%d",&a[i][j]);
}
}
int k=1;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
search(i,j,1);//搜索每个点的最大步数。
}
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
if(k<b[i][j]) k=b[i][j];//找最大值
}
}
cout<<k;
}
0.0分
0 人评分
输出九九乘法表 (C语言代码)浏览:582 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:530 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:1084 |
买不到的数目 (C++代码)浏览:909 |
【绝对值排序】 (C语言代码)浏览:832 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:591 |
母牛的故事 (C语言代码)浏览:594 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:569 |
C二级辅导-进制转换 (C语言代码)浏览:750 |
数组输出 (C语言代码)浏览:749 |