蓝桥杯剪格子dfs
2024-08-31 08:28:40
#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 = ;
int A[][];
bool visit[][];
bool outOfBorder(int i, int j)
{
if (i < || i >= N || j < || 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 ( * currentSum >= sum)
{
if ( * currentSum == sum)// 如果当前遍历过的数字之和等于所有数字之和的一半
num = min(currentNum, num);// 更新包含左上角格子的那个区域包含的格子的最小数目
visit[i][j] = false;
return;// 回溯到上一结点
}
if (!outOfBorder(i, j + ) && !visit[i][j + ])// 向右移动
DFS(i, j + , currentSum, currentNum); if (!outOfBorder(i + , j) && !visit[i + ][j])// 向下移动
DFS(i + , j, currentSum, currentNum); if (!outOfBorder(i, j - ) && !visit[i][j - ])// 向左移动
DFS(i, j - , currentSum, currentNum); if (!outOfBorder(i - , j) && !visit[i - ][j])// 向上移动
DFS(i - , j, currentSum, currentNum);
visit[i][j] = false;
}
int main(){
cin>>M>>N;
for (int i = ; i < N; ++i)
for (int j = ; j < M; ++j)
{
cin>>A[i][j];
sum += A[i][j];
}
DFS(,,,);
if (num == INT_MAX)
printf("");// 输出0
else
printf("%d",num);
return ;
}
最新文章
- spring Mvc + Mybatis 中使用junit
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q121-Q123)
- float 的有效数字为七位是怎么得出来的
- Python学习笔记02
- .NET Remoting学习笔记(一)概念
- 如何解决python中urlopen超时问题
- Debugging a Parallel Application
- Gray码 (格雷码) 【二进制】
- 数据结构(RMQ):UVAoj 11235 Frequent values
- Grunt.js 上手
- JavaScript中闭包实现的私有属性的getter()和setter()方法
- 关于JS中数组的分析操作
- 利用js实现禁用浏览器后退
- 守护态运行Docker容器
- ECMAScript 6 入门之let和const的用法
- linux每日命令(6):rm命令
- js 的深拷贝
- ubantu 重启mysql
- Jsonpath的基本使用
- Linux kernel(CVE-2018-17182)提权漏洞复现