专题1 简单搜索

点击题目名称可以直接跳转

棋盘问题


类似八皇后

#include <iostream>
#include <cstring>using namespace std;const int N = 10;int n, k;
char g[N][N];
bool col[N];//当前列是否摆放棋子
int ans;//方案数量//当前要去搜索第u行,已经放了t个棋子
void dfs(int u, int t)
{if(t == k)//当前摆放棋子数量达到要求,方案数+1{ans ++;return ;}if(n - u < k - t) return ;//剩余可以摆放棋子的行数小于剩余棋子数量if(u == n) return ;//所有行搜索完毕dfs(u + 1, t);//当前行不放棋子,直接搜索下一行for(int i = 0; i < n; i ++)//循环当前行每一列if(g[u][i] == '#' && !col[i])//可以放并且该列没放过{col[i] = true;dfs(u + 1, t + 1);col[i] = false;}
}int main()
{while(cin >> n >> k && n != -1){for(int i = 0; i < n; i ++) cin >> g[i];//两个初始化ans = 0; memset(col, 0, sizeof col);dfs(0, 0);cout << ans << endl;    }return 0;
}

Dungeon Master


常规广搜题,不难就是有点麻烦

#include <iostream>
#include <cstring>using namespace std;const int N = 35, M = N * N * N;char g[N][N][N];
int L, R, C;
int x1, x2, y1, y2, z1, z2;
bool st[N][N][N];
int d[N][N][N];
int dx[] = {0, 0, 0, 0, -1, 1}, dy[] = {0, 0, -1, 1, 0, 0}, dz[] = {1, -1, 0, 0, 0, 0};
struct location
{int x, y, z;
};void bfs()
{location q[M], r;int hh = 0, tt = 0;//手写队列
//  q[0] = {x1, y1, z1};估计是POJ没跟上时代,不支持c++新特性r.x = x1, r.y = y1, r.z = z1;//按照老的来吧q[0] = r;d[x1][y1][z1] = 0;st[x1][y1][z1] = true;while(hh <= tt){location t = q[hh ++];int a = t.x, b = t.y, c = t.z;for(int i = 0; i < 6; i ++){int tx = a + dx[i], ty = b + dy[i], tz = c + dz[i];if(tx < 1 || tx > R || ty < 1 || ty > C || tz < 1 || tz > L) continue;if(g[tx][ty][tz] == '#' || st[tx][ty][tz]) continue;location k;k.x = tx, k.y = ty, k.z = tz;q[++ tt] = k;st[tx][ty][tz] = true;d[tx][ty][tz] = d[a][b][c] + 1;if(tx == x2 && ty == y2 && tz == z2) return ;}}
}int main()
{while(cin >> L >> R >> C && L){for(int k = 1; k <= L; k ++){for(int i = 1; i <= R; i ++){for(int j = 1; j <= C; j ++){cin >> g[i][j][k];if(g[i][j][k] == 'S') x1 = i, y1 = j, z1 = k;if(g[i][j][k] == 'E') x2 = i, y2 = j, z2 = k;}// getchar();这里不用读空格也可以}
//          getchar();}//每次搜索前来个初始化memset(d, 0, sizeof d), memset(st, 0, sizeof st);        bfs();if(d[x2][y2][z2] == 0) puts("Trapped!");else printf("Escaped in %d minute(s).\n", d[x2][y2][z2]);//别忘了这里最后还有个'.'}return 0;
}

Catch That Cow

#include <iostream>
#include <queue>using namespace std;const int N = 1e5 + 10;int n, k;
int d[N];int bfs()
{queue<int> q;q.push(n);while(q.size()){int t = q.front();q.pop();if(t == k) return d[k];//往左走if(t - 1 >= 0 && !d[t - 1]) q.push(t - 1), d[t - 1] = d[t] + 1;//一旦走到k点了就没必要再往右走了if(t + 1 <= k && !d[t + 1]) q.push(t + 1), d[t + 1] = d[t] + 1;if(t * 2 <= k + 1 && !d[t * 2]) q.push(t * 2), d[t * 2] = d[t] + 1;//路径翻倍的时候最多只需要跳到k+1,如果跳到>k+1的地方比如说k+2//那我们还需要往回跳两次,总共需要三次//但是我们完全可以一开始不跳两倍的距离直接向右跳一步,然后再让距离翻倍//这样只需要两步足矣}
}int main()
{cin >> n >> k;cout << bfs();return 0;
}

Fliptile

每次触碰一个方格的时候会改变上下左右和自己,用最少的次数将所有方格变成0

本题和 费解的开关 如出一辙,不同的是本题要输出方案而不是方案个数, 费解的开关一题收录在基础篇当中

#include <iostream>
#include <cstring>using namespace std;const int N = 20;int n, m;
int g[N][N], back[N][N];
int res[N][N], tmp[N][N];
int dx[] = {0, -1, 0, 1, 0}, dy[] = {0, 0, 1, 0, -1};
int ans = 1e9;void turn(int x, int y)
{for(int i = 0; i < 5; i ++){int a = x + dx[i], b = y + dy[i];if(a >= 0  && a < n && b >= 0 && b < m)g[a][b] ^= 1;}
}void work()
{for(int i = 0; i < (1 << m); i ++){memcpy(g, back, sizeof back);memset(tmp, 0, sizeof tmp);int cnt = 0;for(int j = 0; j < m; j ++)if(i >> j & 1){turn(0, m - j - 1);cnt ++;tmp[0][m - j - 1] = 1;}for(int j = 0; j < n - 1; j ++)for(int k = 0; k < m; k ++)if(g[j][k] == 1){turn(j + 1, k);cnt ++;tmp[j + 1][k] = 1;}bool f = true;for(int j = 0; j < m; j ++)if(g[n - 1][j] == 1){f = false;break;}if(!f) continue;if(cnt < ans){ans = cnt;memcpy(res, tmp, sizeof tmp);}}if(ans == 1e9) puts("IMPOSSIBLE");else{for(int i = 0; i < n; i ++){for(int j = 0; j < m; j ++)cout << res[i][j] << ' ';cout << endl;}}
}int main()
{cin >> n >> m;for(int i = 0; i < n; i ++)for(int j = 0; j < m; j ++){scanf("%d", &g[i][j]);back[i][j] = g[i][j];}work();return 0;
}

本题核心在于二进制暴力枚举,暴力枚举就等同于暴力搜索

Find The Multiple


题目虽然说m是不超过200位的十进制数,但是对于所有的n <= 200,我们都能在long long范围内(2^63-1)内找到解,所以我们就按m是在LL范围内来做就行了,不用搞那么复杂,当爆LL以后我们就停止搜索

#include <iostream>using namespace std;typedef long long LL;int n;bool dfs(LL ans, int digit)
{if(digit > 19) return false;//LL最多19位if(ans % n == 0) {cout << ans << endl;return true;}if(dfs(ans * 10, digit + 1)) return true;if(dfs(ans * 10 + 1, digit + 1)) return true;
}int main()
{while(cin >> n && n){dfs(1, 1);}return 0;
}

这道题不推荐用BFS来写,大概率会T,如果你一定要写BFS,记得也提交一下G++,那个可能不会T

kuangbin专题 专题1 简单搜索相关推荐

  1. 专题一:简单搜索、深搜、广搜

    挑战程序设计竞赛(课后题难题汇总) 1. AOJ 0033 Ball(贪心) #include<cstdio> #include<algorithm> using namesp ...

  2. 三个火枪手专题一:简单搜索

    棋盘问题 POJ - 1321 题意:传送门 题解:搞一个列标记,然后进行按照行暴搜,这一行有能取得取下,或者不取这一行,取下一行也可以. 附上代码: #include<iostream> ...

  3. kuangbin 专题一 简单搜索

    kuangbin 专题一 简单搜索 1.POJ1321棋盘问题[DFS] 代码 自己的想法 2.POJ2251Dungeon Master[三维空间BFS] 代码 自己的想法 3.POJ3278 Ca ...

  4. kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题)

    kuangbin 最小生成树专题 - ZOJ - 1586 QS Network (朴素 Prim算法 模板题) 总题单 week 3 [kuangbin带你飞] 题单 最小生成树 + 线段树 Cli ...

  5. 2021高台一中高考成绩查询,2021年高考数学(理)一轮复习题型归纳与训练 专题1.3 简单的逻辑联结词、全称量词与存在量词(学生版).docx...

    2021年高考数学(理)一轮复习题型归纳与训练 专题1.3 简单的逻辑联结词.全称量词与存在量词(学生版).docx 2021年高考理科数学一轮复习题型全归纳与高效训练突破专题1.3 简单的逻辑联结词 ...

  6. 李彦宏:简单搜索永远没有广告;安全是自动驾驶第一天条

    图片来源:新华网 在26日下午举办的2018数博会"人工智能:AI 生态加速未来"论坛中,百度董事长兼CEO李彦宏.中国科学院院士张钹.微软全球资深副总裁王永东等嘉宾分别发表了关于 ...

  7. 和我一起打造个简单搜索之SpringDataElasticSearch入门

    网上大多通过 java 操作 es 使用的都是 TransportClient,而介绍使用 SpringDataElasticSearch 的文章相对比较少,笔者也是摸索了许久,接下来本文介绍 Spr ...

  8. BFS简单搜索--POJ 2243

    这题就是简单的BFS搜索,刚刚转到C++,还有很多库函数不熟悉,理解到BFS是一种奇妙的迭代法,其用的主要是队列的性质. 1 /*BFS简单搜索*/ 2 #include<iostream> ...

  9. java 搜索引擎 关键词高亮_和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮(示例代码)...

    前面几篇文章详细讲解了 ElasticSearch 的搭建以及使用 SpringDataElasticSearch 来完成搜索查询,但是搜索一般都会有搜索关键字高亮的功能,今天我们把它给加上. 系列文 ...

  10. 夸克、QQ浏览器、简单搜索竞品分析报告

    作者:迷航 (转载已取得作者授权) 一.竞品分析目的 伴随着中国移动互联网的人口红利逐渐到顶,手机浏览器市场的马太效应也越发强烈.在激烈的竞争环境下,仍有新价值要素正在带来新的机会:Z时代.00后用户 ...

最新文章

  1. 二分图HK算法[数论+二分图最大独立集]:Lightoj1356
  2. 180.4. WebSphere Commerce Engerprise 7.0 Feature Pack 2.iso
  3. 漫游Kafka入门篇之简单介绍
  4. 先排列再排行 html,三国中猛将的权威排名 颜良为何排列第二
  5. 保姆级!!前端必会Taro入门级教学!!
  6. 如何看待阿里巴巴推荐的Python400集视频?零基础入门学习Python
  7. AAAI2021 大运动“视频超分辨”中的对偶子网与多阶通信上采样方案
  8. linux执行hadoop程序,gcc编译和运行hadoop c api程序
  9. DIY开源mini桌面i3结构3D打印机--分析
  10. linux 安装adobe字体,厚道舒适的字体 -- Adobe Source Code Pro -- 在Linux上安装以及在Emacs中的配置...
  11. 音响在线测试软件,汽车音响调音在线大师班(1):调音第一步,RTA检测播放表现...
  12. Tableau可视化---Tableau简介
  13. Loadrunner Error code : 9013.
  14. bi报表是什么意思,有什么优势?
  15. 爱你穿越时间,两行来至秋末的眼泪
  16. 2016年中国新增装机同比及风电开发分析
  17. 初学者学习插画原画以后就业方向有哪些?和大家聊聊插画原画师就业、薪资等
  18. 蓄水池问题c语言编程,蓄水池算法(Reservoir Sampling)
  19. 安装 ubuntu16.04 ROS2 超过5分钟你打我 后带 测试talker listener demo
  20. Latex语法数学公式参考整理

热门文章

  1. Java 文件传输 (TCP、UDP)
  2. cocosBuilder使用总结
  3. Web前端开发配色表及标准颜色表
  4. 递归算法实例:阶乘(vb.net代码)
  5. python 安卓库_Python 开发安卓Android及IOS应用库Kivy安装尝试
  6. 贵州省谷歌地球高程DEM等高线下载
  7. android 9 one ui,终于!三星S9系列国行开测安卓9.0系统:OneUI真香!
  8. 明月浩空播放器php源码,明月浩空音乐播放器
  9. AI语音外呼机器人是如何帮助电销行业获客?
  10. UCI数据集中文介绍:Waveform Database Generator (Version 1) Data Set