【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 ...
随机推荐
- mssql注入中的储存用法删除与恢复
删除: use master exec sp_dropextendedproc 'xp_cmdshell' exec sp_dropextendedproc 'xp_enumgroups' exec ...
- Django-【template】自定义过滤器和自定义标签
模板语言内置的过滤器和标签比较少,往往会遇到无法满足需求的情况,所以需要我们来自定义.自定义filter和simple_tag在项目中很常用 a.首先检查settings下面INSTALLED ...
- 安全测试===sqlmap(贰)转载
十二.列举数据 这些参数用于列举出数据库管理系统信息.数据结构和数据内容. 1.一键列举全部数据 参数:--all 使用这一个参数就能列举所有可访问的数据.但不推荐使用,因为这会发送大量请求,把有用和 ...
- 64_j1
JSCookMenu-2.0.4-13.fc26.noarch.rpm 13-Feb-2017 22:06 38098 Java-WebSocket-1.3.1-0.2.git58d1778.fc24 ...
- .net设置浏览器的文本模式
这段时间做个项目,做的时候因为之前习惯了Google的调试方式,所以就一直在google上面调试,今天项目成员大家的部分要整合,就放到ie8下面测试,但是遇到一个问题,就是用ie打开之后文本模式一直是 ...
- Hadoop(hadoop,HBase)组件import到eclipse
1.简介: 将源代码import到eclipse可以方便的阅读和修改源码. 2.环境说明: mac mvn工具(Apache Maven 3.3.3 ) 3.hadoop(CDH5.4.2) 1.进入 ...
- FineReport——笔记
1填报分页:需要在填报预览下的链接后添加:&__cutpage__=v:
- 关于JqueryEasyUI插件—Tab,默认选中某个面板 如果不明显指定的话,第一个就是被选中的
如果不明显指定的话,第一个就是被选中的,你可以通过data-options="selected:true"指定默认选中
- Author name disambiguation using a graph model with node splitting and merging based on bibliographic information
Author name disambiguation using a graph model with node splitting and merging based on bibliographi ...
- linux下文件查询命令(cat,more,less,head,tail)
众所周知Linux中命令cat.more.less均可用来查看文件内容,主要区别有:cat是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况:m ...