蓝桥杯 算法提高 8皇后·改 -- DFS 回溯
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
48 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64
const int maxn = ;
struct Map {
int value;
int row, col; //这里写完发现可以省略.....
bool isQue;
Map(int r = , int c = , int v = , bool Q = false) :
row(r), col(c), value(v), isQue(Q) {}
} map[maxn][maxn];
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std; const int maxn = ;
struct Map {
int value;
int row, col;
bool isQue;
Map(int r = , int c = , int v = , bool Q = false) :
row(r), col(c), value(v), isQue(Q) {}
} map[maxn][maxn];
//检测左上, 右上, 正上, 从上到下放置棋子, 且不需要检测横排
int dir[][] = {{-, -}, {-, }, {-, }};
int Q_sum;
int Q_max; //用不同方式摆放Que,和最大的是
int cnt; void init(); //初始化数据
bool check(int r, int c); //检测能否放皇后
bool judge(int r, int c); //检测是否越界
void solve(); //解决问题的接口
void dfs(); //回溯,深搜
void findMax(); //寻找方案的最大值
//启动程序
void AutoStartProcess(); void init()
{
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++) {
// map[i][j].value = i*8 + j + 1;
// map[i][j].isQue = false; cin >> map[i][j].value;
map[i][j].isQue = false;
map[i][j].row = i; map[i][j].col = j;
}
}
} //检测越界, ture -- 没有越界
bool judge(int r, int c)
{
return (r >= && r < maxn) && (c >= && c < maxn);
}
//检测该位置是否能放皇后
bool check(int r, int c)
{
if (!judge(r, c)) return false; int p = ;
bool isOk = true;
for (p = ; p < ; p++) //检测三个方向
{
int tr = r, tc = c;
//判断一个方向是否放过皇后
while (isOk && judge(tr, tc)) //判断是否越界
{
tr = tr + dir[p][];
tc = tc + dir[p][];
//判断这个方向没有放过皇后 ,(!judge())越界当然是没有放过皇后的情况
isOk = isOk && (!judge(tr, tc) || !map[tr][tc].isQue);
}
}
return isOk; //true-可以放皇后, 不可以返回false
} void dfs(int cur)
{
int j = ; if (cur == maxn) { //判断是否超过了第8-1行
findMax(); //计算当前方案的sum
cnt++;
}
else
{
for (j = ; j < maxn; j++)
{
if (check(cur, j)) {
map[cur][j].isQue = true;
dfs(cur + );
map[cur][j].isQue = false;
}
}
}
} void findMax()
{
for (int i_1 = ; i_1 < maxn; i_1++) {
for (int j_1 = ; j_1 < maxn; j_1++) {
if (map[i_1][j_1].isQue) {
Q_sum += map[i_1][j_1].value;
}
}
}
if (Q_sum > Q_max) {
Q_max = Q_sum; //更新最大值
}
Q_sum = ;
} void solve()
{
init();
dfs();
printf("%d\n", Q_max);
// cout << cnt << endl;
} void AutoStartProcess()
{
solve();
} int main()
{
AutoStartProcess();
return ;
}
蓝桥杯 算法提高 8皇后·改 -- DFS 回溯的更多相关文章
- Java实现蓝桥杯 算法提高 八皇后 改
**算法提高 8皇后·改** 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋 ...
- 问题 1936: [蓝桥杯][算法提高VIP]最大乘积
问题 1936: [蓝桥杯][算法提高VIP]最大乘积 时间限制: 1Sec 内存限制: 128MB 提交: 77 解决: 16 题目描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? ...
- 蓝桥杯 算法提高 11-1实现strcmp函数 (JAVA方法)
蓝桥杯 算法提高 11-1实现strcmp函数 (JAVA方法) 首先这不是一个多难的题,但是网上的我没怎么找到有Java的代码,基本全都是c语言的,小编是个小白,如果有不对的地方请联系小编 问题描述 ...
- 蓝桥杯--算法提高 排列数 (简单dfs)
算法提高 排列数 时间限制:1.0s 内存限制:256.0MB 问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下: 012.021.102.120.201.210 输入 ...
- Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)
试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...
- Java实现 蓝桥杯 算法提高 小X的购物计划
试题 算法提高 小X的购物计划 问题描述 小X打算去超市shopping.小X没什么钱,只有N元.超市里有M种物品,每种物品都需要money,在小X心中有一个重要度.有的物品有无限件,有的物品只有几件 ...
- 蓝桥杯算法提高 P1001(大数乘法)
算法提高 P1001 时间限制:1.0s 内存限制:256.0MB 当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法. 具体 ...
- 蓝桥杯 算法提高 金属采集 [ 树形dp 经典 ]
传送门 算法提高 金属采集 时间限制:1.0s 内存限制:256.0MB 锦囊1 锦囊2 锦囊3 问题描述 人类在火星上发现了一种新的金属!这些金属分布在一些奇怪的地方,不妨叫 ...
- Java实现 蓝桥杯 算法提高 字符串匹配
试题 算法提高 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符:当选项关闭时 ...
随机推荐
- centos 7 git的管理和使用
一.linux 安装git (服务端) 1.首先创建用户账号 useradd zlx passwd zlx .... 2.创建目录git仓库 mkdir zlx_git.git 3.赋权限 chown ...
- 博客配置Racket代码字体
我想在博客园的文章中插入Racket代码,但是博客园的代码块和高亮都太难看了,如果能把scribble/manual的CSS文件中的Racket代码块的配置拿出来就可以有漂亮的Racket代码高亮了, ...
- 在nodejs中引进模块要经历的步骤
在nodejs中引入模块需要经历如下3个步骤 1.路径分析 2.文件定位 3.编译执行 在nodejs中模块分为两类,一类是nodejs提供的模块,称为核心模块,另一类的用户编写的模块,称为文件模块. ...
- 微软职位内部推荐-Service Engineer for Office365
微软近期Open的职位: Key Responsibilities: The Service Engineer in this team will be responsible for plannin ...
- underscore.js源码解析(一)
一直想针对一个框架的源码好好的学习一下编程思想和技巧,提高一下自己的水平,但是看过一些框架的源码,都感觉看的莫名其妙,看不太懂,最后找到这个underscore.js由于这个比较简短,一千多行,而且读 ...
- Spring学习总结之装配bean
1. XML中显式配置 规范,文件头: <?xml version=”1.0” encoding=”UTF-8”?> <beans xmlns=http:// ...
- 【Beta阶段】第五次Scrum Meeting!
每日任务内容: 本次会议为第五次Scrum Meeting会议~ 由于本次会议项目经理召开时间依旧较晚,在公寓7层召开,女生参与了线上会议. 队员 昨日完成任务 明日要完成任务 刘乾 #167(未完成 ...
- pdf修复
pdf工具下载地址: 链接:https://pan.baidu.com/s/1SgGSrH7apX64hQEl732wWg 提取码:kg5q 使用说明: 1.含注册命令,先注册再运行.
- 第二个Spring冲刺周期团队进展报告
第一天:找识别不了的原因 第二天:继续找识别不了的原因 第三天:找文字库,找到tessdata语言包,放到手机SD卡根目录 第四天:了解OCR引擎 第五天:将导入tess-two导入到项目中,并进行测 ...
- android开发心得之知识的量变到质变
随着身边越来越多的人开始了尝试android开发,看着他们一点点学期 从nodepad++写代码 cmd 执行,到安装eclipse 和android SDK,仿佛看到了昨天的我一样,一样勤勤恳恳的学 ...