POJ3009-Curling 2.0

题意:

要求把一个冰壶从起点“2”用最少的步数移动到终点“3”

其中0为移动区域,1为石头区域,冰壶一旦想着某个方向运动就不会停止,也不会改变方向(想想冰壶在冰上滑动),除非冰壶撞到石头1 或者 到达终点 3

如果能在10步以内到达终点,输出到达终点所需的步数,否则输出-1

注意的是:

冰壶撞到石头后,冰壶会停在石头前面,此时(静止状态)才允许改变冰壶的运动方向,而该块石头会破裂,石头所在的区域由1变为0. 也就是说,冰壶撞到石头后,并不会取代石头的位置。

终点是一个摩擦力很大的区域,冰壶若到达终点3,就会停止在终点的位置不再移动。

解题思路:

DFS,回溯,利用条件进行优良的剪枝来控制时间

以下代码会WA……想不破哎:-(   暂留

 #include<iostream>
using namespace std;
const int maxn = ;
int square[maxn][maxn];
int w,h;
int r0,c0,r2,c2;
int bestp;///最优解
const int dh[] = {-,,,};///向上0,右1,下2,左3
const int dw[] = { ,,,-}; bool inside(int x,int y)
{
return x>= && x <= h && y>= && y<=w;
} bool walk(int x,int y,int dir,int &xx,int &yy)
{///保证不滑到外面去
///遇到墙面,需要改变square
///到达终点,就停止
///如果可行,需要改变当前的位置x,y
int tempx = x+dh[dir];
int tempy = y+dw[dir];
///首先检测当前方位是否可以滑动
if(inside(tempx,tempy) && square[tempx][tempy] == ) return false;///第一步是墙面,不能滑动 while(true)
{
if(!inside(tempx,tempy)) return false;//滑倒了场外
if(square[tempx][tempy] == )//到达了终点
{
xx = tempx;yy = tempy;
return true;
}
if(square[tempx+dh[dir]][tempy+dw[dir]] == )///下一步滑到墙面
{
xx = tempx;yy = tempy;
square[tempx+dh[dir]][tempy+dw[dir]] = ;///改变场地状态
return true;
}
tempx+=dh[dir];tempy+=dw[dir];///划动一格
}
}
void dfs(int x,int y,int deep)
{ ///临界条件
if(x==r2 && y==c2)
{///寻找最优解
if(deep < bestp)
bestp = deep;
return;
}
for(int i=;i<=;i++)
{
int xx,yy;
bool flag = walk(x,y,i,xx,yy);
if(flag && deep<)
dfs(xx,yy,deep+);
///回溯
if(flag && square[xx][yy] != )
{
square[xx+dh[i]][yy+dw[i]] = ;///改变场地状态
} }
return;
} int main()
{
while(cin>>w>>h && w && h)
{
for(int i=;i<=h;i++)///行
for(int j=;j<=w;j++)///列
{
cin>>square[i][j];
if(square[i][j]==)
{
r0=i;c0=j;
square[i][j]=;
}
if(square[i][j]==)
{
r2=i;c2=j;
}
}
bestp = ;
dfs(r0,c0,);
if(bestp>)
{
cout<<-<<endl;
}
else
cout<<bestp<<endl;
}
return ;
}

POJ3009-Curling 2.0(WA)的更多相关文章

  1. POJ-3009 Curling 2.0 (DFS)

    Description On Planet MM-21, after their Olympic games this year, curling is getting popular. But th ...

  2. POJ3009 Curling 2.0(DFS)

    题目链接. 分析: 本题BFS A不了. 00100 00001 01020 00000 00010 00010 00010 00010 00030 对于这样的数据,本来应当是 5 步,但bfs却 4 ...

  3. POJ3009:Curling 2.0(dfs)

    http://poj.org/problem?id=3009 Description On Planet MM-21, after their Olympic games this year, cur ...

  4. poj3009 Curling 2.0 (DFS按直线算步骤)

    Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14563   Accepted: 6080 Desc ...

  5. poj 3009 Curling 2.0 (dfs )

    Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11879   Accepted: 5028 Desc ...

  6. poj3009 Curling 2.0(很好的题 DFS)

    https://vjudge.net/problem/POJ-3009 做完这道题,感觉自己对dfs的理解应该又深刻了. 1.一般来说最小步数都用bfs求,但是这题因为状态记录很麻烦,所以可以用dfs ...

  7. ****Curling 2.0(深搜+回溯)

    Curling 2.0 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total ...

  8. PHP Yii2.0(一):环境搭建 & 问题集锦

    第一节 简单认识版本的异同 (1)版本说明 在安装和使用之前,我们需要知道 PHP Yii 有两个不同的版本(Yii 1.*或者Yii 2.*),这两个版本的目录结构不一样,其具体使用方式差异较大,因 ...

  9. ArcGIS API for JavaScript 4.0(一)

    原文:ArcGIS API for JavaScript 4.0(一) 最近ArcGIS推出了ArcGIS API for JavaScript 4.0,支持无插件3D显示,而且比较Unity和Sky ...

随机推荐

  1. 使用JS和PHP导出table表格

    把table表格的内容导出成excel 或者word等格式(简单容易不需要太多php) 导出需注意 1. 样式都在行间,导出excel表格会继承样式包括colspan.rowspan,非表格元素,样式 ...

  2. 第五章、Django之多表查询进阶与事务

    目录 第五章.Django之多表查询 一.聚合查询 二.分组查询 三.F与Q查询 四.查询优化 五.Django开启事务 六.自定义char字段 七.ORM常用字段 第五章.Django之多表查询 一 ...

  3. java_day12_jdk1.8新特性

    1.接口的默认方法 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用default关键字即可,这个又叫做扩展方法 //Formula表示一个设计 计算公式 的接口 public inte ...

  4. linux程序对比

  5. SPI总线的原理与Verilog实现

    转载地址:https://www.cnblogs.com/liujinggang/p/9609739.html 一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件 ...

  6. Java通过JDBC连接SQL Server2017数据库

    一.需要明白的基础知识 数据库名 驱动jar(x表示版本号) 具体驱动类 连接字符串(ip地址,端口号,名字) Oracle ojdbc-x.jar oracle.jdbc.oracleDriver ...

  7. Muduo阅读

    创建了EventLoop对象的线程是IO线程,其主要功能是运行事件循环EventLoop::loop(), one loop per thread 事件循环必须在IO线程中运行 Reactor关键结构 ...

  8. bat wmic python 获取进程的所在路径

    bat wmic python 获取进程的所在路径 doc: wmic process where name="process-name" get executablepath w ...

  9. python+Appium自动化:yaml配置capability

    场景 学习了yaml之后就是要将capability的各项参数值与代码分离开. 先创建一个capability.yaml文件,把各项参数存放在其中,然后用load()进行读取. 例子: capabil ...

  10. retrying failed action with response code: 403 错误解决

    [2019-06-10T06:52:51,610][INFO ][logstash.outputs.elasticsearch] retrying failed action with respons ...