#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语言代码)浏览:676 |
点我有惊喜!你懂得!浏览:1347 |
C二级辅导-等差数列 (C语言代码)浏览:596 |
C语言考试练习题_排列 (C++代码)浏览:644 |
C语言训练-数字母 (C语言代码)浏览:590 |
P1002 (C语言代码)浏览:990 |
【绝对值排序】 (C语言代码)浏览:758 |
回文数(一) (C语言代码)浏览:771 |
简单的a+b (C语言代码)浏览:575 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:545 |