kaungbin搜索入门
poj 1321
题目要求
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
输入含有多组测试数据。
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中#表示棋盘区域,.表示空白区域(数据保证不出现多余的空白行或者空白列)。
对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。
参考AC代码
|
|
思路
相当于八皇后的回溯 这里不考虑对角线 一维vis即可
加了一个k的限制 num统计加入的棋子个数 当num==k时更新答案
注意最后还要dfs(cur+1)
这里跟八皇后不同 因为本题不确保可以从上一行正确进入下一行 所以必须手加这句话
poj 2251
题目要求
三维空间从s到t的最短移动次数
.代表可以走 #代表不能走
参考AC代码
|
|
思路
三维宽搜
poj 3278
题目要求
一条线段 问从s到t的最短移动单位时间
每次移动要遵循:pos+1,pos-1,2×pos 三种
参考AC代码
|
|
思路
宽搜
poj 3279
题目要求
有一个01矩阵 目标是用最少的转换次数把它变成全0矩阵
转换方法:每次可以把一个位置的1变成0 0变成1 上下左右四个位置也要转置
参考AC代码
|
|
思路
跟uva11464(白书P15)类似 状压+枚举计算
由于n是15 所以可以用二进制枚举第一行的状态
然后通过题目的限制条件来计算下面每一行
如果上一行是1的话 那么下面一行肯定要翻转 因为只有下面一行能影响上面一行
最后判断一下 最后一行是不是都是0 如果都是 则维护最小的翻转次数
poj 1426
题目要求
给定一个小于200的正整数n 求出任意一个n的倍数 并且它的十进制表示法只由0和1组成
参考AC代码
|
|
思路
本题有一个结论 小于200的倍数最多在18位内肯定存在 所以开LL即可不需要大数
也可以用dfs 给定一个位数的上限即可
bfs直接暴力搜×10 和×10+1