HDU-2553-N皇后问题
题目链接:HDU-2553
题目大意:在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种合法的放置方法。
题目思路:采用回溯。一行一行的放皇后, 然后再递归判断是否与之前已放好的皇后有冲突,一旦有冲突,则不需要继续下一行的搜索,直接返回(省去不必要的枚举)。
详见代码:click here
HDU-1016–Prime Ring Problem(素数环)
题目链接:HDU-1016
题目大意:输入正整数n,把整数1,2,3,…,n组成一个环,使得相邻两个整数之和为素数。输出时从整数1开始。
题目思路:DFS,注意判断最后一个和第一个数相加也是素数
详见代码:click here
HDU-1241-Oil Deposits
题目链接:HDU-1241
题目思路:在一个矩阵里,有些格子是‘@’,有些不是,相邻(上、下、左、右、左上、右上、左下、右下)的格子如果也是‘@’,那么他们属于同一个矿井,问总共有多少个矿井。
题目思路:DFS,求连通块个数。
详见代码:click here
HDU-1312-Red and Black
题目链接:HDU-1312
题目大意:‘@’代表人其实位置,‘.’代表可走格子,‘#’代表‘墙’。问这个人最多能走几个格子。可以走的方向有(上、下、左、右)四个方向。
题目思路:DFS,从‘@’开始搜,如果是可走位置继续搜,如果碰到墙则停止该条路的搜索。
详见代码:click here
HDU-1584-蜘蛛牌
题目链接:HDU-1584
题目大意:小的牌移动到大的牌上面。给出每个牌的位置,问叠成一堆牌的最小移动距离
题目思路:DFS+剪枝
详见代码:click here
POJ-1321-棋盘问题
题目链接:POJ-1321
题目大意:给出一个不规则棋盘,‘#’地方可以放棋子。总共有k个棋子,这些棋子不能在同行同列,问有几种方法。
题目思路:类似于八皇后问题。
详见代码:click here
ZOJ-3332-Strange Country II
题目链接:ZOJ-3332
题目大意:有n个城市,给出n * (n - 1) / 2条 有向 道路(A->B),问是否存在一条路径,是的走遍每个城市且不重复。
题目思路:遍历每个城市为起点,分别进行深搜
详见代码:click here
codeforces-264A-Escape from Stones
题目链接:cf-264A
题目大意:初始主角站在区间[0,1]的中点,然后有大量石头掉落(每次都会掉落在当前区间中点),此时主角会向左右移动,每次移动后的区间缩小为1/2。要求:从左往右输出出现的石头编号。
题目思路:这道题可以模拟做,但是用dfs更为巧妙
详见代码:click here
codeforces-510B-Fox And Two Dots
题目链接:cf-510B
题目大意:是否存在一个相同字母组成的环。
题目思路:搜前后左右,需保证A->B->C,C不可以是A这个点。
详见代码:click here
ZOJ-3805-Machine
题目链接:ZOJ-3805
题目大意:有 n 个不同的机器,他们之间的生产关系构成一棵二叉树,要求使用管道把它们连接起来完成这个生产线,并使得整体的宽度最小 ,管道只有L型和直线型两种(具体形状见题目),不能旋转管道。每台机器最多有2个输入口和1个输出口。
详见代码:click here
codeforces-580C-Kefa and Park
题目链接:cf-580C
题目大意:A的家在1,其余没有子节点的点都是餐厅,途中不能经过m次以上的红点(值为1)问他能去几个餐厅?
题目思路:深搜。需要注意的是他是无向的。
详见代码:click here
codeforces-148D-Bag of mice
题目链接:cf-148D
题目大意:a,b两个人拿球,有w个白球,b个黑球。先拿到白球的人赢。a先开始拿球(不放回),然后b拿球,b拿球之后有一个球从袋子里逃出去,问a赢的概率。
题目思路:第i局a赢的概率为: a拿到白球的概率 + a拿到黑球 * b拿到黑球 * (一个黑球不见 + 一个白球不见)
详见代码:click here
codeforces-510C-Fox And Names
题目链接:cf-510C
题目大意:给出n个字符串按某种字典序排列,求该字典序。
详见代码:click here
HDU-1426-Sudoku Killer
题目链接:HDU-1426
题目大意:数独游戏,有一些‘?’,让你填数字,使得满足他的游戏规则
1.每行数字为1-9
2.每列数字为1-9
3.从左上角起,各9方格区域数字为1-9
题目思路:DFS每个‘?’格子.
详见代码:click here
nyoj-306-走迷宫
题目大意:整个迷宫是用一个N * N的方阵给出,方阵中单元格中填充了一个整数,表示走到这个位置的难度。 这个迷宫可以向上、下、左、右四个方向行走。要求找到一条路径,其路径上单元格最大难度值与最小难度值之差是最小的。
题目思路:二分最高难度和最低难度的差值,然后根据这个差值,暴力出可能的最小难度值和最大难度值,分别进行搜索。
详见代码:click here
ZOJ-3826-Hierarchical Notation
题目大意:“key”:”value”,给出一段字符串,然后q个询问,输入key值,要求输出对应value值。
题目思路:哈希+深搜
详见代码:click here
ZOJ-3673-1729
题目链接:ZOJ-3826
题目大意:给出一个数字m,求满足m = a^3 + b^3(a,b为整数)的所有整数对。
题目思路:这道题主要是数论,但是涉及到dfs
详见代码:click here
ZOJ-3781-Paint the Grid Reloaded
题目链接:ZOJ-3781
题目大意:字符一样并且相邻的即为连通。每次可翻转一个连通块X(O)的颜色,问至少改变几次使得图上所有字符都相等
题目思路:这道题是DFS的应用,将连通块进行缩点。
每次操作都将本身所在的连通块与和自己相邻的不同颜色的连通块变成同一种颜色,也就是变成一个连通块了,那么要使n次操作后全部变成一样的颜色,也就是从某点出发到达其余所有点。
所以,dfs把连通块缩成点,然后相邻的连通块之间建边,枚举以每个点为根的情况,用spfa求最短路。
详见代码:click here
POJ-3279-Fliptile
题目链接:POJ-3279
题目大意:有一个 M * N 的格子,每个格子可以翻转正反面,它们有一面是黑色,另一面是白色。黑色翻转之后变成白色,白色翻转之后则变成黑色。
游戏要做的是把所有的格子翻转为白色。不过因为牛蹄很大,所以每次翻转一个格子,与它上下左右相邻接的格子也会被翻转。
求用最小的步数完成时,每个格子的翻转次数。最小步数的解有多个时,输出字典序最小的一组;解不存在的话,则输出IMPOSSIBLE
题目思路:先确定第一行的翻转方式,然后可以判断这样是否存在解以及解的最小步数是多少
详见代码:click here