POJ 3009 Curling 2.0-DFS
Curling 2.0 题意
就像最强大脑里的一个游戏,从当前位置移动,撞到障碍物后才会停止(所以有可能会冲出地图姐界面),障碍物被撞后会消失,求到达终点的最短路径。
但不同的是,如果路径上可以通过终点,也算到达了。
分析
深度搜索+回溯:
- 撞到块后,记得消除快,回来时要恢复被撞的障碍物。
- 只用了一个简单的剪枝: 当局部最优值大于当前最优值则剪枝。
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相关推荐
- POJ 3009 Curling 2.0(深度优先搜索+剪枝)
POJ 3009 Curling 2.0 题目大意: 在一块光滑的h*w的矩形平面上,有若干个障碍物,用1表示以及空格用0表示.现在有一个小球在平面上的数字2的地方,通过抛掷这个小球,使其达到数字3 ...
- poj 3009 Curling 2.0 (dfs的应用)
http://poj.org/problem?id=3009 (1)这是一个用球撞石头的游戏,撞到石头,石碎球停.在规定的10次抛球机会下,若求移动到终点就赢,否则算输了(出界直接算输). (2)每一 ...
- POJ 3009 Curling 2.0(简单DFS)
题意: 每一次碰到障碍则在障碍的旁边停下来,并且障碍被击碎.此时可以重新值掷一次冰球.当掷球次数超过 10 次则输出 -1. 思路: 1. 超过 10 次输出 -1 这个剪枝很关键: 2. 主要是要注 ...
- POJ 3009 Curling 2.0 {深度优先搜索}
原题 $On Planet MM-21, after their Olympic games this year, curling is getting popular. But the rules ...
- poj 3009 Curling 2.0
题目链接:点击打开链接 Description On Planet MM-21, after their Olympic games this year, curling is getting pop ...
- Curling 2.0 - POJ 3009
参考的这个 思路: 枚举冰球下一个可能所在的所有位置然后DFS. 改了一天的BUG,结果发现这个的长宽是反过来输入的,裂开. #include <iostream> #include &l ...
- POJ Curling 2.0
题目 题目真的长,还有很多细节. #include <iostream> #include <string> using namespace std;struct Coordi ...
- POJ3009 Curling 2.0
原题链接:http://poj.org/problem?id=3009 暴力DFS + 回溯.注意行和列不要搞反,并且当搜索深度大于10的时候直接返回. View Code 1 #include &l ...
- POJ 2676/2918 数独(dfs)
思路:记录每行每列每一个宫已经出现的数字就可以.数据比較弱 另外POJ 3074 3076 必须用剪枝策略.但实现较麻烦,还是以后学了DLX再来做吧 //Accepted 160K 0MS #incl ...
最新文章
- Maven项目Spring Boot启动
- struts2+kindeditor4.0.5的上传图片的实现
- 由String.equals()方法引起的一系列思考
- c++ 返回智能指针_C++核心指南(17) I.11 禁止使用指针(T*)或引用(T)来转移所有权...
- day26(模块 logging 高级用法、collection、random)
- Android高级开发之【RxJava】详解(附项目源码)
- SpringMVC学习(三)RestFul风格
- 刚接触新工作的程序员:直接运行include
- 【阅读笔记】BI系统介绍及建设思路
- OpenLayers教程十五:多源数据加载之矢量地图
- 微信小程序开发之——摇一摇Demo
- Python人脸识别 Python3.7+OpenCV+Dlib+罗技C920摄像头 实现离线实时摄像头画面人脸检测+识别
- Python实用模块
- java代码输出万年历
- 惊闻!港媒:中国首艘航母海试时间延后1个月(图)
- 基于python人工智能的最全学习路线总结,思路明朗了学习才高效
- (四)es6 正则的拓展
- Ubuntu上搭建自己的ngrok服务器
- AMI BIOS开机LOGO添加分离过程
- 【echarts 中国地图增加南海九段线】
热门文章
- 智力过河游戏c语言,Flash AS代码实现智力过河小游戏
- 性能优化的 10 个技巧
- Python爬虫进阶(十):实战,Scrapy爬取贴吧
- windows-phone-power-tools [wp 安装部署xap]
- 最新《JK学院 C语言教程培训 C语言教程+源代码》
- java scanner输入数组_Java Scanner输入两个数组的方法
- arduino笔记20:红外遥控
- python神经网络分析案例_python神经网络实战
- 基于linux的oracle_rac实时应用集群研究,基于Linux的OracleRAC实时应用集群研究毕业设计论文...
- 复旦大学计算机学院教师简介,复旦大学计算机科学技术学院导师教师师资介绍简介-危辉...