蓝桥杯剪格子dfs
#include<iostream> #include<cstring> #include<iomanip> #include<cmath> #include<algorithm> #include<bits/stdc++.h> using namespace std; int N, M; int num = INT_MAX, sum = 0; int A[10][10]; bool visit[10][10]; bool outOfBorder(int i, int j) { if (i < 0 || i >= N || j < 0 || j >= M) return true; return false; } void DFS(int i, int j, int currentSum, int currentNum) { visit[i][j] = true; currentSum += A[i][j]; ++currentNum; if (2 * currentSum >= sum) { if (2 * currentSum == sum)// 如果当前遍历过的数字之和等于所有数字之和的一半 num = min(currentNum, num);// 更新包含左上角格子的那个区域包含的格子的最小数目 visit[i][j] = false; return;// 回溯到上一结点 } if (!outOfBorder(i, j + 1) && !visit[i][j + 1])// 向右移动 DFS(i, j + 1, currentSum, currentNum); if (!outOfBorder(i + 1, j) && !visit[i + 1][j])// 向下移动 DFS(i + 1, j, currentSum, currentNum); if (!outOfBorder(i, j - 1) && !visit[i][j - 1])// 向左移动 DFS(i, j - 1, currentSum, currentNum); if (!outOfBorder(i - 1, j) && !visit[i - 1][j])// 向上移动 DFS(i - 1, j, currentSum, currentNum); visit[i][j] = false; } int main(){ cin>>M>>N; for (int i = 0; i < N; ++i) for (int j = 0; j < M; ++j) { cin>>A[i][j]; sum += A[i][j]; } DFS(0,0,0,0); if (num == INT_MAX) printf("0");// 输出0 else printf("%d",num); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码