时间紧张,先记一笔,后续优化与完善。

题意:一个N*M的地图,走过的点不能再走,X为墙弗成走,能否从点S到点D恰好用时T。(1 < N, M < 7; 0 < T < 50)

标题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010

——>>有点数典忘祖的感觉,寒假时用cin输入数据,轻松AC,后来渐渐改成了用scanf来输入,明天,这道坑爹的标题交了n次也是WA,取代了n种方式后发明,是输入的问题,料想是输入的地图有空格……

超时优化的思想:

1、可走格子数少于T时,必定不ok;

2、从格子A到格子B,无论怎么走,步数的奇偶性相同。

用时很少的写法:

#include <cstdio>
#include <cmath>
#include <iostream>using namespace std;char MAP[8][8];
int N, M, T, s_x, s_y, d_x, d_y;
int dx[] = {-1, 0, 1,  0};
int dy[] = { 0, 1, 0, -1};bool ok;void dfs(int x, int y, int cur)
{if(ok) return;int temp = T - cur - abs(d_x-x) - abs(d_y-y);if((temp < 0) || (temp % 2 == 1)) return;for(int i = 0; i < 4; i++){int new_x = x + dx[i];int new_y = y + dy[i];if(new_x >= 0 && new_x < N && new_y >= 0 && new_y < M && MAP[new_x][new_y] != 'X'){if(new_x == d_x && new_y == d_y && cur+1 == T) ok = 1;else{MAP[new_x][new_y] = 'X';dfs(new_x, new_y, cur+1);MAP[new_x][new_y] = '.';}}}
}
int main()
{int i, j, sum;while(scanf("%d%d%d", &N, &M, &T) == 3){if(N == 0 && M == 0 && T == 0) return 0;sum = 1;for(i = 0; i < N; i++){//getchar();for(j = 0; j < M; j++){//MAP[i][j] = getchar();//scanf("%c", &MAP[i][j]);cin>>MAP[i][j];if(MAP[i][j] == 'S'){s_x = i;s_y = j;}else if(MAP[i][j] == 'D'){d_x = i;d_y = j;}else if(MAP[i][j] == 'X') sum++;}}sum = N*M - sum;ok = 0;MAP[s_x][s_y] = 'X';if(T <= sum)dfs(s_x, s_y, 0);if(ok) printf("YES\n");else printf("NO\n");}return 0;
}
每日一道理
有一首诗最为动人,那就是青春;有一段人生最美丽,那就是青春;有一道风景最为亮丽,那就是青春。青春,不要说已疲惫,也许你的幻想曾被现实无情毁灭,也许你的追求毫无结果,但你应该相信,没有寒风的洗礼,哪来万紫千红的春天,没有心的耕耘,哪有累累硕果?

vis[][]数组写法:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>using namespace std;const int maxn = 7 + 10;
int dx[] = {-1, 1,  0, 0};
int dy[] = { 0, 0, -1, 1};
char MAP[maxn][maxn];
bool ok, vis[maxn][maxn];
int N, M, T, Dx, Dy;void dfs(int x, int y, int cur)
{if(ok) return;if(cur == T){if(x == Dx && y == Dy){ok = 1;return;}elsereturn;}int temp = T - cur - (Dx - x) - (Dy - y);if(temp < 0 || (temp&1)) return;for(int i = 0; i < 4; i++){int newx = x + dx[i];int newy = y + dy[i];if(newx >= 0 && newx < N && newy >= 0 && newy < M && MAP[newx][newy] != 'X' && !vis[newx][newy]){vis[newx][newy] = 1;dfs(newx, newy, cur+1);vis[newx][newy] = 0;}}
}int main()
{int Sx, Sy, i, j;while(scanf("%d%d%d", &N, &M, &T) == 3){if(!N && !M && !T) return 0;for(i = 0; i < N; i++){for(j = 0; j < M; j++){cin>>MAP[i][j];if(MAP[i][j] == 'S'){Sx = i;Sy = j;}else if(MAP[i][j] == 'D'){Dx = i;Dy = j;}}}ok = 0;memset(vis, 0, sizeof(vis));vis[Sx][Sy] = 1;dfs(Sx, Sy, 0);if(ok)printf("YES\n");elseprintf("NO\n");}return 0;
}

文章结束给大家分享下程序员的一些笑话语录: 很多所谓的牛人也不过如此,离开了你,微软还是微软,Google还是Google,苹果还是苹果,暴雪还是暴雪,而这些牛人离开了公司,自己什么都不是。

--------------------------------- 原创文章 By 输入和空格 ---------------------------------

输入空格hdu - 1010 - Tempter of the Bone相关推荐

  1. HDU.1010 Tempter of the Bone

    文章目录 一.题目解读 1.原题 2.分类 3.题意 4.输入输出格式 5.数据范围 二.题解参考 1.总体思路 2.思路① (1).分析 (2).AC代码 三.评价与后话 1.评价 2.奇偶剪枝0- ...

  2. HDOJ 1010 HDU 1010 Tempter of the Bone ACM 1010 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目描述: 代码 ...

  3. 回溯法+奇偶剪枝——Hdu 1010 Tempter of the Bone

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

  4. HDU 1010 Tempter of the Bone heuristic 修剪

    的问题是,在测试修剪. 应该说是更先进的应用. 由于使用的heuristic(经验)修剪.总结这方面的经验法则,别easy.我说,这也是由于先进的在线报告中的应用程序没有分析太多太好的解决这个问题,计 ...

  5. (step4.3.1) hdu 1010(Tempter of the Bone——DFS)

    题目大意:输入三个整数N,M,T.在接下来的N行.M列会有一系列的字符.其中S表示起点,D表示终点. .表示路 . X表示墙...问狗能有在T秒时到达D.如果能输出YES, 否则输出NO 解题思路:D ...

  6. HDU 1010 Tempter of the Bone heuristic 剪枝法

    本题就是考剪枝法了. 应该说是比较高级的应用了.因为要使用heuristic(经验)剪枝法.要总结出这个经验规律来,不容易.我说这是高级的应用也因为网上太多解题报告都没有分析好这题,给出的程序也很慢, ...

  7. HDU 1010 Tempter of the Bone DFS(奇偶剪枝优化)

    需要剪枝否则会超时,然后就是基本的深搜了 #include<cstdio> #include<stdio.h> #include<cstdlib> #include ...

  8. HDU 2128 Tempter of the Bone II BFS

    状压整张图包括每个点的炸弹有没有被拿,墙壁有没有被炸.用优先队列存一下状态. 还有就是注意整数数溢出的问题. #include <cstdio> #include <cstring& ...

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

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

最新文章

  1. 使用Python,OpenCV和Hough圆检测图像中的圆
  2. 分布式锁实现:Redis
  3. c语言检测四个方向键盘输入,如何既检测鼠标单击又检测键盘输入
  4. 【机器学习基础】机器学习中必知必会的 3 种特征选取方法!
  5. Vim文本编辑器 指令簿(二)
  6. 学做三件事、三句话、三乐、三不要
  7. 花30万买鸿蒙汽车,值吗?
  8. 20190817:(leetcode习题)旋转图像
  9. linux蜂鸣器驱动指令,linux蜂鸣器驱动 蜂鸣器--LINUX.doc
  10. mongodb 命令补充
  11. 《HelloGitHub》第 24 期(两周年)
  12. 黑马程序员pink老师_CSS学习笔记
  13. python字典输出键值对_Python:遍历字典 键值对
  14. 字节跳动面试题后台_字节跳动面试题
  15. 詹克团为“夺权”动作频频 引发比特大陆员工不满
  16. 【小样本基础】N-way K-shot 模式和训练策略
  17. 百度地图API获取行政区域边界(省、市、区县)
  18. RAP2环境部署(nginx代理模式)及运维
  19. 题目1198:a+b-----没有AC掉,,,,,借鉴了别人的一份,还有carr(c[len] = carr)(++len);是什么意思?...
  20. 服务器w8系统如何重装系统,如何重装Windows8.1 Win8.1系统重装流程图解

热门文章

  1. python gil 解除_python GIL的解读
  2. mac 配置 php,mac如何配置php环境
  3. echart x轴标签偏移_移动端H5页面滑动手势X轴实例
  4. 【硬件基础】振荡(时钟)周期、状态周期、机械周期、指令周期
  5. 照片换色 使用Python 或者 java
  6. java中的基本用法
  7. CSS之关系选择器(子元素、后代、兄弟选择器)
  8. 浏览器安全检查己通过_百度主动推送三项合一功能
  9. element select 自动展开_原生js 让select下拉框自动展开 可用size 属性来代替展开动作...
  10. 用R语言做词频统计_R语言 | 词频统计