POJ3009-Curling 2.0(WA)
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)的更多相关文章
- POJ-3009 Curling 2.0 (DFS)
Description On Planet MM-21, after their Olympic games this year, curling is getting popular. But th ...
- POJ3009 Curling 2.0(DFS)
题目链接. 分析: 本题BFS A不了. 00100 00001 01020 00000 00010 00010 00010 00010 00030 对于这样的数据,本来应当是 5 步,但bfs却 4 ...
- POJ3009:Curling 2.0(dfs)
http://poj.org/problem?id=3009 Description On Planet MM-21, after their Olympic games this year, cur ...
- poj3009 Curling 2.0 (DFS按直线算步骤)
Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14563 Accepted: 6080 Desc ...
- poj 3009 Curling 2.0 (dfs )
Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11879 Accepted: 5028 Desc ...
- poj3009 Curling 2.0(很好的题 DFS)
https://vjudge.net/problem/POJ-3009 做完这道题,感觉自己对dfs的理解应该又深刻了. 1.一般来说最小步数都用bfs求,但是这题因为状态记录很麻烦,所以可以用dfs ...
- ****Curling 2.0(深搜+回溯)
Curling 2.0 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total ...
- PHP Yii2.0(一):环境搭建 & 问题集锦
第一节 简单认识版本的异同 (1)版本说明 在安装和使用之前,我们需要知道 PHP Yii 有两个不同的版本(Yii 1.*或者Yii 2.*),这两个版本的目录结构不一样,其具体使用方式差异较大,因 ...
- ArcGIS API for JavaScript 4.0(一)
原文:ArcGIS API for JavaScript 4.0(一) 最近ArcGIS推出了ArcGIS API for JavaScript 4.0,支持无插件3D显示,而且比较Unity和Sky ...
随机推荐
- js面向对象的几种方式
对象的字面量 var obj={}:创建实例对象 var obj=new Object();构造函数模式 function fn(){}, new fn();工厂模式:用一个函数,通过传递参数返回对象 ...
- Python学习记录3-函数参数详解
参数详解 参数分类 普通参数 默认参数 关键字参数 收集参数 普通参数 定义时直接定义变量名 调用的时候直接把变量或者值放入指定位置 def 函数名 (参数1, 参数2, ....): 函数体 # 调 ...
- Linux内核移植主要过程
- Dart的导包
Dart中的库主要有三种: 1.我们自定义的库 import 'lib/xxx.dart'; 2.系统内置库 import 'dart:math'; import 'dart:io'; import ...
- kubernetes之pod生命周期,pod重启策略, 镜像拉取策略
pod声明周期(状态):pending , running, succeeded, failed, unknown 挂起(Pending):Pod 已被 Kubernetes 系统接受,但有一个或者多 ...
- [USACO14OPEN]GPS的决斗Dueling GPS's
题目概况 题目描述 给你一个\(N\)个点的有向图,可能有重边. 有两个\(GPS\)定位系统,分别认为经过边\(i\)的时间为\(P_i\),和\(Q_i\). 每走一条边的时候,如果一个系统认为走 ...
- 微信小程序开发框架 Wepy 的使用
一.github地址:https://github.com/Tencent/wepy 按照 README.md 的步骤进行操作: 1.在“介绍”中获得 wepy 的开发资源汇总:https://git ...
- Redis入门(一)
Redis入门 什么是Redis Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库,属于非关系型数据库的一种(NoSQL). Redis 与其他 key - val ...
- Python 读取txt文件,排序并写回文件
# 'C:\Users\SAM\Desktop\数据竞赛\个人征信_1108\个人征信\train\bank_detail_train.txt'# 反斜杠的写法会报编码错误f=open('C:/Use ...
- 12 saltstack部署OpenStack
参考源码:https://github.com/unixhot/salt-openstack nova control.sls