【题目大意】

给出一张地图,一旦往一个方向前进就必须一直向前,直到一下情况发生:(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的更多相关文章

  1. 【POJ】3009 Curling 2.0 ——DFS

    Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11432   Accepted: 4831 Desc ...

  2. POJ-3009 Curling 2.0 (DFS)

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

  3. 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】

    目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...

  4. Kattis - glitchbot 【DFS】

    Kattis - glitchbot [DFS] 题意 有一个机器人 刚开始在(0, 0),然后给出一个目标点,并且会给出一系列指令,但是其中会有一个指令是错误的.我们需要找出那个指令,并且改成正确的 ...

  5. HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))

    度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  6. 【翻译】Flume 1.8.0 User Guide(用户指南) Processors

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

  7. 【翻译】Flume 1.8.0 User Guide(用户指南) Channel

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

  8. 【翻译】Flume 1.8.0 User Guide(用户指南) Sink

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

  9. 【翻译】Flume 1.8.0 User Guide(用户指南) source

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

  10. 【翻译】Flume 1.8.0 User Guide(用户指南)

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

随机推荐

  1. 【遍历集合】Java遍历List,Map,Vector,Set的几种方法

    关于list,map,set的区别参考http://www.cnblogs.com/qlqwjy/p/7406573.html 1.遍历list @Test public void testList( ...

  2. leetcode 136 137 Single Number

    题目描述(面试常考题) 借助了异或的思想 class Solution { public: int singleNumber(vector<int>& nums) { ; ; i ...

  3. hdu 3572(构图+最大流)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. Search for a Range——稍微升级版的二分查找

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...

  5. window下线程同步之(Critical Sections(关键代码段、关键区域、临界区域)

    关键区域(CriticalSection) 临界区是为了确保同一个代码片段在同一时间只能被一个线程访问,与原子锁不同的是临界区是多条指令的锁定,而原子锁仅仅对单条操作指令有效;临界区和原子锁只能控制同 ...

  6. 前端读者 | 前端面试基础手册(HTML+CSS)

    本文来自@羯瑞:希望前端面试基础手册能帮助要找工作的前端小伙伴~~ HTML 前端需要注意哪些SEO? 合理的title.description.keywords:搜索对着三项的权重逐个减小,titl ...

  7. GIT的安装及git状态的变更详解

    一.安装git环境 (2)Git安装 Centos: yum install -y git Ubuntu: apt-get install git Windows安装git bash软件 注意不要使用 ...

  8. Nginx+PHP “No input file specified”错误的解决办法

    配置官网商城php网站时候,界面报错“No input file specified” 原理: 任何对.php文件的请求,都简单地交给php-cgi去处理,但没有验证该php文件是否存在. PHP文件 ...

  9. oracle 优化方案小记

    1. 目前状况 1.1 表空间未合理规划,导致所有的用户下的所有表都创建在默认的表空间下 oracle 使用过程中未针对特定数据表进行特定的表空间规划,导致目前实例中所有的数据库表都存储中默认的表空间 ...

  10. python模块之HTMLParser

    HTMLParser是python用来解析html的模块.它可以分析出html里面的标签.数据等等,是一种处理html的简便途径. HTMLParser采用的是一种事件驱动的模式,当HTMLParse ...