[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 迭代加深搜索. 可以想见最后深度不会很深吧.. 然后皇后之间互相攻击到是允许的.. 就这样 [代码] /* 1.Shoud it use long long ? 2.Have you ever test several sample(at least therr) yourself? 3.Can you promise that the solution is right? At least,the main ideal 4.u…
题意:输入一个n*m棋盘(n,m<10),某些格子有标记.用最少的皇后守卫(即占据或者攻击)所有带标记的格子. 分析:因为不知道放几个皇后可以守卫所有带标记的格子,即回溯法求解时解答树的深度没有明显的上限,所以使用迭代加深搜索. 将棋盘的每个格子标记为0~n*m-1,依次枚举守卫的皇后个数,枚举当前守卫的皇后个数下所有的放置情况,看是否能全部守卫.(枚举方式i:1~n,j:i+1~n……) #pragma comment(linker, "/STACK:102400000, 1024000…
题目大意:在一个国际象棋盘上放置皇后,使得目标全部被占领,求最少的皇后个数. 题目分析:迭代加深搜索,否则超时. 小技巧:用vis[0][r].vis[1][c].vis[2][r+c].vis[c-r+N]分别标志(r,c)位置相对应的行.列.主.副对角线有没有被占领(详见<入门经典(第2版)>P193),其中N表示任意一个比行数和列数都大(大于等于)的数. 代码如下: # include<iostream> # include<cstdio> # include&l…
暴力,和八皇后很像,用表示i+j和i-j标记主对角线,但是还是要加一些的剪枝的. 1.最裸的暴搜 6.420s,差点超时 2.之前位置放过的就没必要在放了,每次从上一次放的位置开始放 0.400s #include<cstdio> #include<cstring> ; char G[maxn][maxn]; int maxd; int n,m; ],vis2[maxn<<]; bool dfs(int d,int si,int sj) { if(d == maxd){…
题目: 输入一个n*m的棋盘(n,m<10),某些格子有标记,用最少的皇后守卫(即占据或攻击)所有的标记的格子.输出皇后的个数. 思路: 一开始没有想到用迭代加深搜索,直接dfs结果还没写完就发现这样要枚举的量太大了……于是换用迭代加深搜索.对于每个格子有四个方向可以用i,j,i+j,i+j+maxn(下标要是正的)表示,当cur等于枚举的答案maxd就判断是不是所有的标记都被攻击了. 另外如果这个格子放上了皇后,那该皇后所在行的后边的格子就没必要枚举了,直接跳到下一行的开头就可以了. 将二维数…
题意: 皇后防御的范围是他所在横.竖.对角线,地图上的#为可以放旗子的地方.问最少放几个皇后能防守所有#. 分析: vis数组开4维,对应行.列.主对角线.副对角线 代码: #include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;int map[15][15];int vis[4][30];int n,m;int maxn;in…
本题题意: 输入一个n*m的棋盘,某些格子有标记,用最少的皇后占据或者攻击所以带标记的格子.皇后的攻击范围为同行同列和同对角线. 可以使用IDA*算法,即从样例可以发现只需要最多5个棋子就可以对棋盘上所有地方进行攻击,因而使用IDA*进行对应的剪枝即可. #include<cstdio> #include<cstring> using namespace std; ,maxd; ][];///表示皇后已经攻击的范围,vis[0][]中存储的是行,vis[1][]中存储的是每列,vi…
题目链接 正解是IDA*+四个方向判重,但由于是个裸的可重复覆盖问题,可以用DLX水过~ 每个格子与放上皇后能干掉的标记连边,跑可重复覆盖DLX.注意要用IDA*来优化,否则会超时. #include<bits/stdc++.h> using namespace std; typedef long long ll; +; int n,m,np,ka; char s[N][N]; struct P {int x,y;} p[N*N]; bool ok(P a,P b) { ; ; ; ; } s…
感觉这题还可以 因为总空间比输入数量 不知高到哪里去了 ,所以完全不需要考虑放不下的问题 从贪心的角度考虑,如果要使相差数量巨大的\(b\)和\(w\)能够成功放下来,应该使这些方块尽量分散(似乎有点抽象) 来一发图解 作者因为太懒于是决定直接以B表示黑色,W表示白色 假设有一组方块拼成了一个正方形,如图 BWB WBW BWB 那么在不改变白块数量的情况下,最多还能加\(4\)个黑块,分别连在四个白块旁边 但是如果拉成直线,如图 BWBWBWBWB 发现可以在两边总共加\(8\)个黑块了,因为…
[题解]宫廷守卫 [P1263] 传送门:宫廷守卫 \([P1263]\) [题目描述] 给出一个 \(n*m\) 的方格图,分别用整数 \(0,1,2\) 表示空地.陷阱.墙,空地上可以放置守卫,如果两个守卫在同一行或同一列且他们之间没有墙的阻挡,那么他们就会互相看见.求最多可以放置多少个守卫使得他们互相无法看见对方,并输出其中一种方案. [样例] 样例输入: 3 4 2 0 0 0 2 2 2 1 0 1 0 2 样例输出: 2 1 2 3 3 [数据范围] \(100 \%:\) \(1…