MnZn求助,样例过不了,提交上去WA了三个点
查看原帖
MnZn求助,样例过不了,提交上去WA了三个点
332462
哲学♂王子楼主2021/2/21 18:20

Rt,样例输入:

5 5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

错误出在“19”的位置上。

看了下,在运行到“19”这个位置的时候,以每个点为起点的最长长度应该是这样的:

1 2 3 4 5
16 17 18 19 6
15 1 1 1 7
14 1 1 1 8
13 12 11 10 9

然而我的代码却跑成了这样:

1 2 3 4 5
16 17 18 7 6
15 1 1 1 7
14 1 1 1 8
13 12 11 10 9

想了半个小时也没想出错误的地方,看了题解也不懂。提交上去,WA了#3,#9,#10点。

求大佬帮忙康康代码qwq:

#include<bits/stdc++.h>
using namespace std;
int R,C,Snow[105][105],View[105][105],s,x,z,y,An;
bool Pd[105][105];
int Play(int a,int b);
int main()
{
	scanf("%d%d",&R,&C);
	for(int i=1;i<=R;i++)
		for(int j=1;j<=C;j++)
		{
			scanf("%d",&Snow[i][j]);
			View[i][j]=1;
		}
	for(int i=1;i<=R;i++)
		for(int j=1;j<=C;j++)
        {
        	View[i][j]=Play(i,j);
        	An=max(An,View[i][j]);
		}
	printf("%d",An);
	return 0;
}
int Play(int a,int b)
{
	s=x=z=y=0;
	if(Pd[a][b]==true)
	    return View[a][b];
	if(a!=1&&Snow[a-1][b]<Snow[a][b])
	{
		s=Play(a-1,b)+1;
		View[a-1][b]=s-1;
		Pd[a-1][b]=true;
	}
    if(a!=R&&Snow[a+1][b]<Snow[a][b])
    {
		x=Play(a+1,b)+1;
		View[a+1][b]=x-1;
		Pd[a+1][b]=true;
	}
    if(b!=1&&Snow[a][b-1]<Snow[a][b])
    {
		z=Play(a,b-1)+1;
		View[a][b-1]=z-1;
		Pd[a][b-1]=true;
	}
    if(b!=C&&Snow[a][b+1]<Snow[a][b])
    {
		y=Play(a,b+1)+1;
		View[a][b+1]=y-1;
		Pd[a][b+1]=true;
	}
	Pd[a][b]=true;
	int A=max(View[a][b],s);
	A=max(A,x);
	A=max(A,z);
	A=max(A,y);
	return A;
}

谢谢大佬,不胜感激。

2021/2/21 18:20
加载中...