dfs wa了4,6,80分救助,悬赏关注一个
查看原帖
dfs wa了4,6,80分救助,悬赏关注一个
908394
zhaoxubing楼主2023/3/23 21:09
#include<iostream>
#include<cmath>
using namespace std;
int mp[110][110],u[110][110],n,m;
int xx[4] = { -1,1,0,0 };
int yy[4] = { 0,0,-1,1 };
void dfs(int dx, int dy)
{
	for (int h = 0; h < 4; h++)
	{
		int x = dx + xx[h], y = dy + yy[h];
		if(x>0&&x<=n&&y>0&&y<=m)
		if (mp[x][y] < mp[dx][dy])
		{
			if (u[x][y] == 0) {//?
				u[x][y] = 1;
				dfs(x, y);
				u[dx][dy] = max(u[x][y] + 1, u[dx][dy]);//回溯
			}
			else {
				u[dx][dy] = max(u[x][y] + 1, u[dx][dy]);
			}
		}
	}
}
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++)
			cin >> mp[i][j];
	int sum = 0;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++)
			if (u[i][j] == 0) {
				dfs(i, j);
			}
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++)
			sum = max(u[i][j], sum);
	cout << sum << endl;
	return 0;
}
2023/3/23 21:09
加载中...