Resolución de problemas de esquí (dfs)

Problema de esquí (fuente Luogu)

A primera vista, es el recuerdo de la búsqueda profunda + encontrado es realmente el caso

Codigo original:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>

using namespace std;

int n,m,a[105][105],flag[105][105],maxx,t; 

int dfs(int x,int y)
{
    
    		
	    if(flag[x][y]!=0)
	    return flag[x][y];
	    
        t=0;
		if(a[x][y]>a[x][y+1])
		t=max(t,dfs(x,y+1));	
		if(a[x][y]>a[x][y-1])
		t=max(t,dfs(x,y-1));	
		if(a[x][y]>a[x+1][y])
		t=max(t,dfs(x+1,y));
		if(a[x][y]>a[x-1][y])
		t=max(t,dfs(x-1,y));

		flag[x][y]=t+1;
		return flag[x][y];
}


int main()
{
    
    
	cin>>n>>m;
	for(int i=0;i<=n+1;i++)
	{
    
    
		for(int j=0;j<=m+1;j++)
		{
    
    
			a[i][j]=1000000;
			flag[i][j]=0;
		}
	}	  
	for(int i=1;i<=n;i++)
	{
    
    
		for(int j=1;j<=m;j++)
		{
    
    
			cin>>a[i][j];
		}
	}	    
	for(int i=1;i<=n;i++)
	{
    
    
		for(int j=1;j<=m;j++)
		{
    
    
				dfs(i,j);
		}
	}
	for(int i=1;i<=n;i++)
	{
    
    
		for(int j=1;j<=m;j++)
		{
    
    
			maxx=max(maxx,flag[i][j]);
		} 
	}
    cout<<maxx;

	return 0;
}

Pero esto solo puede ser 90 puntos. Es el primer dato cada vez.
Después de 4 días de reverencia, WA finalmente descubrió su propio problema [Sahua]

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>

using namespace std;

int n,m,a[105][105],flag[105][105],maxx; 

int dfs(int x,int y)
{
    
    		
	    if(flag[x][y]!=0)
	    return flag[x][y];
        flag[x][y]=1;
		if(a[x][y]>a[x][y+1])
		flag[x][y]=max(flag[x][y],dfs(x,y+1)+1);	//万一刚好相等都是1
		if(a[x][y]>a[x][y-1])
		flag[x][y]=max(flag[x][y],dfs(x,y-1)+1);	//要在判断时就+1
		if(a[x][y]>a[x+1][y])
		flag[x][y]=max(flag[x][y],dfs(x+1,y)+1);
		if(a[x][y]>a[x-1][y])
		flag[x][y]=max(flag[x][y],dfs(x-1,y)+1);

		return flag[x][y];
}


int main()
{
    
    
	cin>>n>>m;
	for(int i=0;i<=n+1;i++)
	{
    
    
		for(int j=0;j<=m+1;j++)
		{
    
    
			a[i][j]=1000000;
			flag[i][j]=0;
		}
	}	  
	for(int i=1;i<=n;i++)
	{
    
    
		for(int j=1;j<=m;j++)
		{
    
    
			cin>>a[i][j];
		}
	}	    
	for(int i=1;i<=n;i++)
	{
    
    
		for(int j=1;j<=m;j++)
		{
    
    
				dfs(i,j);
		}
	}
	for(int i=1;i<=n;i++)
	{
    
    
		for(int j=1;j<=m;j++)
		{
    
    
			maxx=max(maxx,flag[i][j]);
		} 
	}
    cout<<maxx;

	return 0;//最重要的一步
}

【Sahua ~~~】

Supongo que te gusta

Origin blog.csdn.net/yyh0910/article/details/115057591
Recomendado
Clasificación