第八届蓝桥杯 dfs 方格分割

本文介绍了一种使用深度优先搜索(DFS)算法解决特定图形问题的方法。该算法通过搜索点而非格子,并标记每个访问过的点及其中心对称点来判断是否达到边界条件,最终输出经过适当调整的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

蓝桥杯

这里写图片描述

这里写图片描述

这里写图片描述

深搜题,搜的不是格子,是点,然后标记这个点以及它的中心对称点,如果,x,y的坐标超出界限,就说明剪开了,最后得到的结果除4,因为这个图形可能在四个角任意一个角;

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int vis[9][9]= {0};
const int N=6;
int ans=0;
int dire[4][2]= {0,-1,0,1,1,0,-1,0};
void dfs(int x,int y)
{
    if(x==0||y==N||y==0||x==N)
    {
        ans++;
        return;
    }
    for(int i=0; i<4; i++)
    {
        int nx=x+dire[i][0];
        int ny=y+dire[i][1];
        if(nx<0||ny<0||nx>N||ny>N)
        {
          continue;
        }
        if(!vis[nx][ny])
        {
            vis[nx][ny]=1;
            vis[N-nx][N-ny]=1;
            dfs(nx,ny);
            vis[nx][ny]=0;
            vis[N-nx][N-ny]=0;
        }
    }

}
int main()
{
    vis[N/2][N/2]=1;
    dfs(N/2,N/2);
    printf("%d\n",ans/4);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值