Curling 2.0 题意

就像最强大脑里的一个游戏,从当前位置移动,撞到障碍物后才会停止(所以有可能会冲出地图姐界面),障碍物被撞后会消失,求到达终点的最短路径。
但不同的是,如果路径上可以通过终点,也算到达了。

分析

深度搜索+回溯:

  1. 撞到块后,记得消除快,回来时要恢复被撞的障碍物。
  2. 只用了一个简单的剪枝: 当局部最优值大于当前最优值则剪枝。

AC代码

#include<iostream>
#define N INT_MAX
using namespace std;
int n,m,start_x,start_y,end_x,end_y,Min;
int a[25][25];
int dir[4][2]= {{0,-1},{0,1},{1,0},{-1,0}};void dfs(int x,int y,int step) {if(step>=Min||step>10)//剪枝+不能超过10return;for(int i=0; i<4; i++) {int dx=x+dir[i][0],dy=y+dir[i][1];//如果刚走一步就碰到块,或者走出地图了,说明这方向走不通。if(dx<0 || dy<0 || dx>=m || dy >=n || a[dx][dy]==1)continue;//既然这个方向可以走,则一直延这个方向前进while(1) {if((dx < 0 || dx >= m) || (dy < 0 || dy >= n) || a[dx][dy] == 1) {break ;//在地图外 或者 遇到块,就不走了}if(dx==end_x && dy==end_y) { //到达终点Min=min(Min,step);//更新return;}dx += dir[i][0];dy += dir[i][1];}if(step+1>10)//步数超了  还没到终点 剪枝 免得进行下面的操作continue;if(dx>=0 && dy>=0 && dx<m && dy<n && a[dx][dy]==1) { //撞到块了a[dx][dy]=0;//把块消掉dfs(dx-dir[i][0],dy-dir[i][1],step + 1);a[dx][dy]=1;//恢复消掉的块}}
}
int main() {while(cin>>n>>m&&n&&m) {for(int i=0; i<m; i++) {for(int j=0; j<n; j++) {cin>>a[i][j];//地图if(a[i][j]==2) { //起点start_x=i;start_y=j;} else if(a[i][j]==3) { //终点end_x=i;end_y=j;}}}Min=N;dfs(start_x,start_y,1);if(Min==N)cout<<"-1"<<endl;elsecout<<Min<<endl;}
}

POJ 3009 Curling 2.0-DFS相关推荐

  1. POJ 3009 Curling 2.0(深度优先搜索+剪枝)

    POJ 3009  Curling 2.0 题目大意: 在一块光滑的h*w的矩形平面上,有若干个障碍物,用1表示以及空格用0表示.现在有一个小球在平面上的数字2的地方,通过抛掷这个小球,使其达到数字3 ...

  2. poj 3009 Curling 2.0 (dfs的应用)

    http://poj.org/problem?id=3009 (1)这是一个用球撞石头的游戏,撞到石头,石碎球停.在规定的10次抛球机会下,若求移动到终点就赢,否则算输了(出界直接算输). (2)每一 ...

  3. POJ 3009 Curling 2.0(简单DFS)

    题意: 每一次碰到障碍则在障碍的旁边停下来,并且障碍被击碎.此时可以重新值掷一次冰球.当掷球次数超过 10 次则输出 -1. 思路: 1. 超过 10 次输出 -1 这个剪枝很关键: 2. 主要是要注 ...

  4. POJ 3009 Curling 2.0 {深度优先搜索}

    原题 $On Planet MM-21, after their Olympic games this year, curling is getting popular. But the rules ...

  5. poj 3009 Curling 2.0

    题目链接:点击打开链接 Description On Planet MM-21, after their Olympic games this year, curling is getting pop ...

  6. Curling 2.0 - POJ 3009

    参考的这个 思路: 枚举冰球下一个可能所在的所有位置然后DFS. 改了一天的BUG,结果发现这个的长宽是反过来输入的,裂开. #include <iostream> #include &l ...

  7. POJ Curling 2.0

    题目 题目真的长,还有很多细节. #include <iostream> #include <string> using namespace std;struct Coordi ...

  8. POJ3009 Curling 2.0

    原题链接:http://poj.org/problem?id=3009 暴力DFS + 回溯.注意行和列不要搞反,并且当搜索深度大于10的时候直接返回. View Code 1 #include &l ...

  9. POJ 2676/2918 数独(dfs)

    思路:记录每行每列每一个宫已经出现的数字就可以.数据比較弱 另外POJ 3074 3076 必须用剪枝策略.但实现较麻烦,还是以后学了DLX再来做吧 //Accepted 160K 0MS #incl ...

最新文章

  1. Maven项目Spring Boot启动
  2. struts2+kindeditor4.0.5的上传图片的实现
  3. 由String.equals()方法引起的一系列思考
  4. c++ 返回智能指针_C++核心指南(17) I.11 禁止使用指针(T*)或引用(T)来转移所有权...
  5. day26(模块 logging 高级用法、collection、random)
  6. Android高级开发之【RxJava】详解(附项目源码)
  7. SpringMVC学习(三)RestFul风格
  8. 刚接触新工作的程序员:直接运行include
  9. 【阅读笔记】BI系统介绍及建设思路
  10. OpenLayers教程十五:多源数据加载之矢量地图
  11. 微信小程序开发之——摇一摇Demo
  12. Python人脸识别 Python3.7+OpenCV+Dlib+罗技C920摄像头 实现离线实时摄像头画面人脸检测+识别
  13. Python实用模块
  14. java代码输出万年历
  15. 惊闻!港媒:中国首艘航母海试时间延后1个月(图)
  16. 基于python人工智能的最全学习路线总结,思路明朗了学习才高效
  17. (四)es6 正则的拓展
  18. Ubuntu上搭建自己的ngrok服务器
  19. AMI BIOS开机LOGO添加分离过程
  20. 【echarts 中国地图增加南海九段线】

热门文章

  1. 智力过河游戏c语言,Flash AS代码实现智力过河小游戏
  2. 性能优化的 10 个技巧
  3. Python爬虫进阶(十):实战,Scrapy爬取贴吧
  4. windows-phone-power-tools [wp 安装部署xap]
  5. 最新《JK学院 C语言教程培训 C语言教程+源代码》
  6. java scanner输入数组_Java Scanner输入两个数组的方法
  7. arduino笔记20:红外遥控
  8. python神经网络分析案例_python神经网络实战
  9. 基于linux的oracle_rac实时应用集群研究,基于Linux的OracleRAC实时应用集群研究毕业设计论文...
  10. 复旦大学计算机学院教师简介,复旦大学计算机科学技术学院导师教师师资介绍简介-危辉...