搜索

求最长可走多少路的代码:

void dfs(int x,int y,int cnt)
{
    v[x][y]=1;                               //开始就标,避免漏掉起点
    ans=max(ans,cnt);
    for(int i=0;i<4;i++)
    {
        int xx=x+dir[i][0];                     
        int yy=y+dir[i][1];                        //有小于0的情况
        if(check(xx,yy)&&m[xx][yy]!='#')        //check函数要写在前面,不然数组会越界
        {
            dfs(xx,yy,cnt+1);    
        }
    }
    v[x][y]=0;
}


求最大连通图:
void dfs(int x,int y)
{
    v[x][y]=1;                        //不需要清除标记
    ans++;                            //能走就加1
    for(int i=0;i<4;i++)
    {
        int xx=x+dir[i][1];
        int yy=y+dir[i][0];
        if(check(xx,yy)&&m[xx][yy]!='#')
        {
            dfs(xx,yy);   
        }
    }
}
posted @ 2025-04-07 21:56  _窗帘  阅读(10)  评论(0)    收藏  举报