题意:在一个R行C列(2=<R,C<=15,R*C<=30)的矩阵里有障碍物和数字格(包含1~9的数字)。你可以从任意一个数字格出发,每次沿上下左右的方向走一格,但不能走障碍格中,也不能重复经过,然后把沿途经过的所有数字连起来,问能得到的最大整数是多少?

分析:题目很简单,但容易超时,必须加上预期剪枝,就是当前搜索的和它之后可能搜索的最大长度加起来是否超过当前最优解,如果相等就按字典序比较,否则回溯。

# include<iostream>
# include<cstdio>
# include<cmath>
# include<map>
# include<queue>
# include<string>
# include<string.h>
#include<set>
#include<list>
# include<algorithm>
using namespace std;
char mp[30][30];
int row, col;
int vis[30][30];
int dx[] = { 1,-1,0,0 };
int dy[] = { 0,0,1,-1 };
pair<int, int>que[100];
int head, tail;
int viss[30][30];
string res;
int h(int x,int y) {head=tail = 0;int cnt = 0;que[tail++] = make_pair(x, y);memcpy(viss, vis, sizeof(viss));while (head < tail) {pair<int, int>u = que[head++];for (int i = 0; i < 4; i++) {int ddx = u.first + dx[i];int ddy = u.second + dy[i];if (ddx < 0 || ddx >= row || ddy < 0 || ddy >= col)continue;if (!viss[ddx][ddy]&&mp[ddx][ddy]!='#') {viss[ddx][ddy] = 1;cnt++;//还能搜索的长度que[tail++] = make_pair(ddx, ddy);}}}return cnt;
}
void dfs(int curx,int cury,int layer,string A) {int ant = h(curx, cury);int l = res.size();if (layer + ant < l)return;//期望剪枝if (layer + ant == l) {if (A + "z" < res)return;//字典序剪枝}if (A.size() > res.size() || (A.size() == res.size() && res < A))res = A;//更新结果for (int i = 0; i < 4; i++) {int ddx = curx + dx[i];int ddy = cury + dy[i];if (ddx < 0 || ddx >= row || ddy < 0 || ddy >= col)continue;if (vis[ddx][ddy]||mp[ddx][ddy]=='#')continue;vis[ddx][ddy] = 1;dfs(ddx, ddy, layer + 1, A+mp[ddx][ddy]);vis[ddx][ddy] = 0;}}
int main() {while (cin >> row >> col && row&&col) {for (int i = 0; i < row; i++)cin >> mp[i];memset(vis, 0, sizeof(vis));res = "";for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (mp[i][j]!='#') {string A="";A+=mp[i][j];vis[i][j] = 1;dfs(i, j, 1, A);vis[i][j] = 0;}}}cout << res << endl;}return 0;
}

UVA - 11882Biggest Number dfs+期望剪枝相关推荐

  1. 2010年湖南省第六届大学生程序设计大赛 F题 “Biggest Number” CSG - 1051 // UVA 11882 (dfs+bfs+剪枝)

    题目链接 一.题目内容 一个r行c列的矩阵,里面只有1-9的数字和'#',最开始可以随意挑选一个数字然后可以上下左右移动,问所走的路径所含数字最大为多少. 样例解释 input 3 7 ##9784# ...

  2. CodeForces 991E Bus Number DFS+ 组合数

    CodeForces 991E Bus Number DFS+ 组合数 题目大意:给定一个数字,数字里出现的每一个数,都至少要用一个,问能组成多少个新数,不加前导零. input: 2028 outp ...

  3. 有趣的题目:简单深搜之数独与靶型数独--二进制状压加速与dfs数独剪枝

    Sudoku Time Limit: 2000MS   Memory Limit: 65536K 题目链接http://poj.org/problem?id=2676 Description Sudo ...

  4. POJ1416 Shredding Company ACM解题报告(DFS回溯+剪枝)

    本渣渣明天C语言考试,今天有点亢奋,又来了一题,这题感觉比前一题难多了,不仅是字符串转化为数字,即使看了百度提醒的搜索树,还是参考了一些百度的代码.感觉道阻且长,我仍需努力.下面是题目翻译: 公司现在 ...

  5. L3-001 凑零钱(dfs+玄学剪枝=AC)

    题目链接:L3-001 凑零钱 梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 10^​4 ​​ 枚 ...

  6. POJ 1190 生日蛋糕 【DFS + 极限剪枝】

    题目传送门:http://poj.org/problem?id=1190 参考剪枝:https://blog.csdn.net/nvfumayx/article/details/6653111 生日蛋 ...

  7. zoj(2110)Tempter of the Bone(DFS+奇偶剪枝)

    剪枝很重要,可走的格数小于时间则减去,然后就是奇偶性剪枝 可以把map看成这样: 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 ...

  8. Tempter of the Bone(DFS + 奇偶剪枝,好题)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  9. hdu1010 dfs+路径剪枝

    题意:用一个案例来解释 4 4 5 S.X. ..X. ..XD .... 在这个案例中,是一个4*4的地图. . 表示可走的地方, X 表示不可走的地方,S表示起始点,D表示目标点.没走到一个点之后 ...

最新文章

  1. 保障K8s部署中的安全性
  2. ICLR要搞深度生成模型大讨论,Max Welling和AAAI百万美元大奖得主都来了,Bengio是组织者之一...
  3. NDK android Error:Expected caller to ensure valid ABI: MIPS
  4. 在学习Python基础中需要知道的知识点:运算符大全,收藏,以后方面查询(算术运算符、赋值运算符、比较运算符、位运算符、逻辑运算符、成员运算符、身份运算符、运算符优先级))
  5. 深度学习代码注解(一)—— mnistdeepauto
  6. ITK:标记连接组件的轮廓
  7. 精通Android3笔记--第四章
  8. 高级数据结构---优先队列
  9. 关于element-ui的upload文件上传组件的使用技巧总结
  10. 某外企招聘程序员部分面试题,求作答!!!
  11. Windows环境下配置thrift编译器(VS2015)
  12. Envi和Arcgis软件冲突的解决方法
  13. Unity超基础学习笔记(四)
  14. 指针用作函数参数、指针型函数和函数指针
  15. mybatisplus activerecord之mybatisplus entity XXX Not Found TableInfoCache.错误
  16. AStar算法通用实现+可视化(Matlab)
  17. 计161--Problem H: 求三角形面积-gyy
  18. hadoop初体验——WordCount实例
  19. 绿卡日记:2020-12-28
  20. 浏览器的收藏夹在哪里打开

热门文章

  1. Nginx服务的信号控制
  2. spring boot整合redis实现统计访问量
  3. RocketMQ实现原理
  4. 什么是HystrixDashbord/如何使用?
  5. 复制(Copying)
  6. leader选举的源码分析-FastLeaderElection
  7. Zuul鉴权和添加用户服务
  8. python中如何删除字典中的元素_python中字典删除元素
  9. 在操作系统理论中,什么是饿死
  10. SpringMVC+Spring+mybatis项目搭建详细过程