蓝桥杯 算法提高 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实现 蓝桥杯 算法提高 字符串匹配
试题 算法提高 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行.你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符:当选项关闭时 ...
随机推荐
- Web项目开发流程 PC端
一.了解.明确需求. 这个应该是第一步了,不了解需求你就不知道为什么要做,要怎么去做这个项目的工作. (1)明确需求是相当重要的,很有必要去和产品经理.设计人员去沟通,需要明白每一个按钮,每一个开 ...
- Spark 实践——基于 Spark MLlib 和 YFCC 100M 数据集的景点推荐系统
1.前言 上接 YFCC 100M数据集分析笔记 和 使用百度地图api可视化聚类结果, 在对 YFCC 100M 聚类出的景点信息的基础上,使用 Spark MLlib 提供的 ALS 算法构建推荐 ...
- Beta冲刺预备
作业链接 Beta冲刺随笔集 github地址 讨论组长是否重选的议题和结论 在Alpha阶段我们由于没有项目经验,很多技术都仅限于书本上的知识,没有真正实践过,所以出现各种各样的问题,在组长的带领下 ...
- Access restriction: The type 'BASE64Decoder' is not API
Access restriction: The type 'BASE64Decoder' is not API (restriction on required library 'C:\Program ...
- spring not_support 该方法被事务方法调用时 不会加入spring事务 只是执行jdbc普通的事务
- 一本通1633【例 3】Sumdiv
1633:[例 3]Sumdiv 时间限制: 1000 ms 内存限制: 524288 KB [题目描述] 原题来自:Romania OI 2002 求 ABAB 的所有约数之和 mo ...
- dp乱写1:状态压缩dp(状压dp)炮兵阵地
https://www.luogu.org/problem/show?pid=2704 题意: 炮兵在地图上的摆放位子只能在平地('P') 炮兵可以攻击上下左右各两格的格子: 而高原('H')上炮兵能 ...
- 解决 No Entity Framework provider found for the ADO.NET provider
方法很简单,添加下面的dll即可 EntityFramework.SqlServer.dll 疯吻IT
- suoi22 WRX知识树(dfs序)
把一条路径拆成到根的四个链(两端点.lca和fa[lca]),然后给dfs序中链的端点做单点修改.区间查询它的子树和再加上它原来的权值就可以了 #include<bits/stdc++.h> ...
- 收藏:Windows消息机制
百度百科介绍的windows消息机制也不错:http://baike.baidu.com/view/672379.htm Windows的应用程序一般包含窗口(Window),它主要为用户提供一种可视 ...