求解,求大佬解释
查看原帖
求解,求大佬解释
829443
wansaa楼主2023/4/4 20:42

在main函数里面那个dfs要处理所有的节点呀

#include<stdio.h>
int map[105][105],r,c;
int m1[4]={1,0,-1,0};
int m2[4]={0,-1,0,1};
int maxd[105][105];
int maxlen;
int maxnum(int a,int b)
{
    return a>b?a:b;
}
int check(int a,int b)
{
    return a>0&&a<=r&&b>0&&b<=c;
}
int dfs(int x,int y)
{
    if(maxd[x][y]) return maxd[x][y];
    maxd[x][y]=1;
    for(int i=0;i<4;i++)
    {
        if(check(x+m1[i],y+m2[i])&&map[x][y]>map[x+m1[i]][y+m2[i]])
        {
            maxd[x][y]=maxnum(dfs(x+m1[i],y+m2[i])+1,maxd[x][y]);
        }
    }
    return maxd[x][y];
}
int main()
{
    scanf("%d %d",&r,&c);
    int max=0,mr=1,mc=1;
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j<=c;j++)
        {
            scanf("%d",&map[i][j]);
        }
    }
    for(int i=1;i<=r;i++)//为啥要用两层for循环
    {
        for(int j=1;j<=c;j++)
        {
            maxlen=maxnum(maxlen,dfs(i,j));
        }
    }
    printf("%d",maxlen);
    return 0;
}
2023/4/4 20:42
加载中...