蓝桥杯 算法提高 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实现 蓝桥杯 算法提高 字符串匹配
试题 算法提高 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符:当选项关闭时 ...
随机推荐
- jstree API
https://www.jstree.com/ drag & drop support(拖放) keyboard navigation(键盘导航) inline edit, create ...
- 树莓派3b安装Nginx和php7和百度语音合成模块
1.安装sox系统mp3音频播放模块(项目需要) sudo apt-get install lame sudo apt-get install sox sudo apt-get install lib ...
- jupyter notebook 更改工作环境和浏览器
转载自:https://blog.csdn.net/u011141114/article/details/78556227 1 修改默认目录 最近刚刚开始学习Python,比较好的一个IDE就是jup ...
- 金蝶盘点机PDA仓库条码管理:仓库如何盘点
1.1. 仓库盘点 传统的仓库盘点,需要人工手工抄写盘点单,时候再去电脑上一行行的录入盘点单,操作非常耗时费力,往往需要盘点好几天,最终盘点效果还不好,在抄写过程中容易出现错误,从而造成盘点结果不准确 ...
- win10系统安装web3js的正确方法
在安装web3的时候 用npm install web3 –save-dev 在win10系统下会一直安装不成功.后来换用了 cnpm install web3 –save-dev 安装时候报出:C ...
- 第十八次ScrumMeeting博客
第十八次ScrumMeeting博客 本次会议于12月8日(五)22时整在3公寓725房间召开,持续20分钟. 与会人员:刘畅.辛德泰.张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的内容和 ...
- centos 升级python2.6 到python3.3(实测可行)
http://blog.csdn.net/harith/article/details/17538233
- linq to sql中的自动缓存(对象跟踪)
linq to sql中,对于同一个DataContext上下文环境,根据表主键选择记录时(当然这里所指的“记录”会自动转成“对象”),如果该记录已经被select过,默认情况下会被自动缓存下来,下次 ...
- php插入中文数据到MySQL乱码
事情是这样的:我在本地的测试成功了,放到服务器测试,发现服务器的数据库里的中文竟然乱码了. 我进行了以下几步基本的做法: PHP文件改为utf-8的格式. 加入header("Content ...
- 安装VS2013
安装VS2013, 之前就有VS2010,安装了一个多小时,纠结,下面是截图. 1.安装 2.登录,之前就有账号了 3.这就是VS2013了. 4.测试 5通 ...