【DFS】POJ3009-Curling 2.0
【题目大意】
给出一张地图,一旦往一个方向前进就必须一直向前,直到一下情况发生:(1)碰到了block,则停在block前,该block消失;(2)冲出了场地外;(3)到达了终点。改变方向十次以上或者冲出场外都判输,问至少几步能到达终点,无法到达输出-1。
【思路】
DFS,往四个方向搜索,每次不断向前直到出现如上三种情形,并根据三种情形操作,有点类似于模拟。回溯的时候犯的小错误记在代码的注释里面了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=+;
const int INF=0x7fffffff;
int map[MAXN][MAXN];
int dx[]={,,,-};
int dy[]={,-,,};
int line,row,sx,sy;
int ans; void dfs(int x,int y,int step)
{
if (step> || step>ans) return;
for (int i=;i<;i++)
{
int tx=x+dx[i],ty=y+dy[i];
if (map[tx][ty]==) continue;
while (tx<line && ty<row && tx>= && ty>= && map[tx][ty]!= && map[tx][ty]!=)
{
tx+=dx[i];
ty+=dy[i];
}
if (tx==line || ty==row || tx< || ty<) continue;
/*冲出场外判为输*/ if (map[tx][ty]==)
{
/*到达终点记录最小步数*/
if (step<ans) ans=step;
continue;
} else if (map[tx][ty]==)
{
/*碰到障碍物则停在障碍物前,并清除障碍物*/
map[tx][ty]=;
dfs(tx-dx[i],ty-dy[i],step+);
map[tx][ty]=;
/*
map[tx][ty]=0;
tx-=dx[i];
ty-=dy[i];
dfs(tx,ty,step+1);
map[tx+dx[i]][ty+dy[i]]=1;←如上情况是,回溯时千万不要忘记把倒退的步骤加回去
*/ }
}
} int main()
{
while (scanf("%d%d",&row,&line))
{
if (row==line && line==) break;
for (int i=;i<line;i++)
for (int j=;j<row;j++)
{
scanf("%d",&map[i][j]);
if (map[i][j]==)
{
sx=i;sy=j;
map[i][j]=;
}
}
ans=INF;
dfs(sx,sy,);
if (ans!=INF) cout<<ans<<endl;
else cout<<-<<endl;
}
return ;
}
【DFS】POJ3009-Curling 2.0的更多相关文章
- 【POJ】3009 Curling 2.0 ——DFS
Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11432 Accepted: 4831 Desc ...
- POJ-3009 Curling 2.0 (DFS)
Description On Planet MM-21, after their Olympic games this year, curling is getting popular. But th ...
- 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...
- Kattis - glitchbot 【DFS】
Kattis - glitchbot [DFS] 题意 有一个机器人 刚开始在(0, 0),然后给出一个目标点,并且会给出一系列指令,但是其中会有一个指令是错误的.我们需要找出那个指令,并且改成正确的 ...
- HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))
度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 【翻译】Flume 1.8.0 User Guide(用户指南) Processors
翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...
- 【翻译】Flume 1.8.0 User Guide(用户指南) Channel
翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...
- 【翻译】Flume 1.8.0 User Guide(用户指南) Sink
翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...
- 【翻译】Flume 1.8.0 User Guide(用户指南) source
翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...
- 【翻译】Flume 1.8.0 User Guide(用户指南)
翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...
随机推荐
- HDU 2899 三分
我们对这个函数求二阶导数,发现他的二阶导数是恒大于0的,那么他的导数是单调的,且在某时刻为0,那么这时的x值就是极值处的x值,其实题目说了,有最小值,那么我们三分水过去就好了. 反思:精度不够,因为是 ...
- Html5_sessionStrong和localStorage的灵活使用
谈谈这两个属性sessionStrong和localStorage是Html5新增点属性,用来记录一些数据在浏览器. 两者的区别sessionStrong存储的数据是暂时的,浏览器关掉后,存储下来的数 ...
- Python ctypes的byref和pointer有啥区别
byref(n)返回的相当于C的指针右值&n,本身没有被分配空间: >>> from ctypes import *>>> n = c_int(0)> ...
- jeecg3.7中弹出窗操作标签dgOpenOpt的用法
1.基本参数 参数名 描述 url 弹出页面地址 title ...
- CMD命令行下载文件
远程执行sct的另一种姿势 cscript /b C:\Windows\System32\Printing_Admin_Scripts\zh-CN\pubprn.vbs 127.0.0.1 scrip ...
- 利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单
转载自:https://www.leavesongs.com/PENETRATION/apache-cve-2017-15715-vulnerability.html 目标环境: 比如,目标存在一个上 ...
- frp 使用入门
1.下载安装对应系统版本 https://github.com/fatedier/frp/releases/ 2.将下载的frp移动到系统软件目录 mv frp/ /usr/local 3.配置frp ...
- FastDFS介绍和配置过程
由于网站使用nfs共享方式保存用户上传的图片,附件等资料,然后通过apache下载的方式供用户访问,在网站架构初期,使用这种简单的方式实现了静态资源的读写分离,但随着网站数据量的增加,图片服务器渐渐成 ...
- Linux内核死锁检测机制【转】
转自:http://www.oenhan.com/kernel-deadlock-check 死锁就是多个进程(线程)因为等待别的进程已占有的自己所需要的资源而陷入阻塞的一种状态,死锁状态一旦形成,进 ...
- hadoop环境搭建编译
安装: JDK1.7+ maven 3.0 or later findbugs 1.3.9 protocolBuffer 2.5.0 cmake 2.6 zlib-devel openssl-deve ...