xueliyuan @ 2020-07-30 16:18:02
其他全WA
样例过了
我主要是DFS思路,首先2重循环枚举开始点,再用DFS搜索上下左右四个方向。如果走过了用flag标记一下,在判断边界,走没做过,有没有比所在点高,接着继续递归搜索一下。用一个步数参数step,然后用maxn更新它。最后输出maxn(具体一会看程序)
假如我们先不考虑超时情况,那么这个代码怎么改?
( ̄ ‘i  ̄;)
#include<bits/stdc++.h>
using namespace std;
int Map[101][101];
bool flag[101][101];
int n,m;
int maxn=-1;
void dfs(int a,int b,int step)
{
memset(flag,0,sizeof(flag));
if(a<n&&flag[a+1][b]==0&&Map[a][b]>Map[a+1][b])
{
dfs(a+1,b,step+1);
flag[a+1][b]=1;
}
if(b<m&&flag[a][b+1]==0&&Map[a][b]>Map[a][b+1])
{
dfs(a,b+1,step+1);
flag[a][b+1]=1;
}
if(a>0&&flag[a-1][b]==0&&Map[a][b]>Map[a-1][b])
{
dfs(a-1,b,step+1);
flag[a-1][b]=1;
}
if(b>0&&flag[a][b-1]==0&&Map[a][b]>Map[a][b-1])
{
dfs(a,b-1,step+1);
flag[a][b-1]=1;
}
maxn=max(maxn,step);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>Map[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
dfs(i,j,0);
}
}
cout<<maxn;
return 0;
}
by 某个L姓羸弱 @ 2020-07-30 16:21:42
啊这……
by 某个L姓羸弱 @ 2020-07-30 16:22:40
让我康康
by xueliyuan @ 2020-07-30 16:27:37
@无秒 flag有用吧,它记录有没有走过
by xueliyuan @ 2020-07-30 16:27:58
@无秒 你是指step还是flag???
by xueliyuan @ 2020-07-30 16:28:43
@无秒 把“你”字,改成“您”字o( ̄▽ ̄)o
by Sh4kespeare @ 2020-07-30 16:32:51
凑个热闹
把他JC了
by 某个L姓羸弱 @ 2020-07-30 16:33:35
@无秒 您可以尝试一下把发帖人JC一下,他就坐在我旁边……
by xueliyuan @ 2020-07-30 16:35:59
@无秒 我指的是我把我说的“你”改成您?
by 无秒 @ 2020-07-30 16:36:48
没没没,是我不懂规矩,交流时要说“您”
by 某个L姓羸弱 @ 2020-07-30 16:37:07
@无秒 出现了!