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. 4.SpringMVC 配置式开发-处理器映射器

    处理器映射器 HandlerMapping HandlerMapping 接口负责根据request请求找到对应的Handler处理器及Interceptor拦截器, 并将它们封装在HandlerEx ...

  2. 智能指针原理及实现(2)unique_ptr

    只允许基础指针的一个所有者. 可以移到新所有者(具有移动语义),但不会复制或共享(即我们无法得到指向同一个对象的两个unique_ptr). 替换已弃用的 auto_ptr. 相较于 boost::s ...

  3. C#验证控件使用方法及常用正则表达式例析(转)

    ASP.NET为开发人员提供了一整套完整的服务器控件来验证用户输入的信息是否有效.这些控件如下: 1.RequiredFieldValidator:验证一个必填字段,如果这个字段没填,那么,将不能提交 ...

  4. 打印n对括号的全部有效组合(左右括号正确匹配)Java实现

    一.问题导出 今天在做算法题目的时候遇到了一道左右括号匹配的问题,问题如下: 二.问题思考 (1)这种要列出全部可能性的题目很容易想到由小到大去发现规律,用递归或者暴力搜索. 首先1的情况,一个括号只 ...

  5. davinci 删除路线站点关系

    删除路线站点关系 DELETE FROM tb_station_info_draw WHERE id in (SELECT stationId FROM tb_road_station_relatio ...

  6. 这些JVM命令配置参数你知道吗?

    JVM是多数开发人员视为理所当然的Java功能和性能背后的重负荷机器.然而,我们很少有人能理解JVM是如何进行工作的—像任务分配和垃圾收集.转动线程.打开和关闭文件.中断和/或JIT编译Java字节码 ...

  7. host文件简介及修改后不能保存解决方法

    一.文件概述 Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先 ...

  8. 共享手机网络给电脑(USB连接)

    华为手机步骤: 设置-->搜索-->hdb-->允许HiSuite通过HDB连接设置 设置-->无线和网络-->移动网络共享-->USB共享网络

  9. PAT Basic 1052 卖个萌 (20 分)

    萌萌哒表情符号通常由“手”.“眼”.“口”三个主要部分组成.简单起见,我们假设一个表情符号是按下列格式输出的: [左手]([左眼][口][右眼])[右手] 现给出可选用的符号集合,请你按用户的要求输出 ...

  10. tnsnames.ora配置细节注意

    WXPT = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.250)(PORT = 1521) ...