poj 3009 Curling 2.0 (dfs的应用)

 http://poj.org/problem?id=3009

(1)这是一个用球撞石头的游戏,撞到石头,石碎球停。在规定的10次抛球机会下,若求移动到终点就赢,否则算输了(出界直接算输)。

(2)每一次的深搜都有四个方向,每个方向要一直走,直到出现以下状况为止:

    1)刚要抛球,被墙挡住了(该情况不能抛球);

    2)  出界;

    3)到达终点;

    4) 撞墙。

    其中只有第四种情况需要进行深搜,其他情况均不需要。(虽然这很显然,但是案例

    通不过的基本上就是因为这个,千万小心)。

(3)通过了所有案例,为什么还是WA??小心,注意输入 n,m 顺序问题。题中所给的案例

   恰好与n,m 的顺序无关。。。这是挖好了陷阱等你呢。

(4)稍微注意: if(!n&&!m) break;

总的来说,这是一道不错的dfs入门题。

具体代码:

View Code
#include<stdio.h>
#include<string.h>
#define Inf (1<<28)
int n, m;
int map[25][25];
int dir[4][2]={1,0,0,1,-1,0,0,-1};
int px, py, ans;
int dfs(int x, int y, int depth)
{int i, j, k;if(depth>10) return 0;for(i=0;i<4;i++){int tx=x, ty=y, ex, ey;int g=0;for(j=0;;j=1){ex=tx+dir[i][0];ey=ty+dir[i][1];if(!j&&map[ex][ey]==1) break;   //靠墙,不能投if(ex<=0||ex>n||ey<=0|ey>m)  break;  //出界if(map[ex][ey]==3)   //终点
            {if(ans>depth) ans=depth;return 0;}if(map[ex][ey]==1) {g=1; break;}//撞墙tx=ex; ty=ey;//球还在滚动中
        }if(g){map[ex][ey]=0;dfs(tx, ty, depth+1);  //下一步,只有撞墙的才算一步map[ex][ey]=1;}}return 0;
}
int main()
{int i, j, k;while(scanf("%d%d", &m, &n)!=EOF, n||m)  //注意 n, m 的顺序
    {for(i=1;i<=n;i++)for(j=1;j<=m;j++){scanf("%d", &map[i][j]);if(map[i][j]==2) {px=i;py=j;}}ans=Inf;dfs(px, py, 1);if(ans!=Inf) printf("%d\n", ans);else printf("-1\n");}return 0;
}

 

 

 

转载于:https://www.cnblogs.com/tim11/archive/2012/08/18/2645715.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asterisk学习进阶-3

配置就先说那么一些&#xff0c;其他也都是类似的配置&#xff0c;只是熟练程度问题了&#xff0c;原理相通&#xff0c;接下来就不在赘述功能配置&#xff0c;我们得花些精力来分析功能模块以及他们之间的相互配合问题&#xff0c;因为自己这些东西看的时间也不久&#xff0c;…

移动app测试的多样性_快速搞定APP移动端自动化测试

1. 何为数据驱动什么是参数化&#xff1f;什么又是数据驱动&#xff1f;经常有人会搞不明白他们的关系&#xff0c;浅谈一下个人的理解&#xff0c;先来看两个测试中最常见的场景&#xff1a;登录&#xff1a;不同的用户名&#xff0c;不同的密码&#xff0c;不同的组合都需要做…

ui自动化测试框架_浅谈前端(UI)自动化测试

作为一名测试开发从业者&#xff0c;自动化测试好像是绕不开的话题...。结合最近接触到的一些测开应聘同学聊到关于前端自动化测试及自己的理解&#xff0c;分享一下自己对UI自动化测试的认识&#xff0c;大概如下。测试分层的自动化测试思想自动化测试分层思想所倡导的是对系统…

【转发】响应式Web设计?怎样进行?

什么是响应式Web设计&#xff1f;怎样进行&#xff1f;眼下&#xff0c;几乎每个新客户都希望他们的网站可以有专门的移动设备版本。最完美的情况呐&#xff0c;就是为iPhone、iPad、黑莓、Kindle…各自打造一款——页面分辨率还必须兼容任何设备。谁知道未来5年内我们还需要为…

cad坐标归零lisp_批量除一个数的lisp,请高手改成保留成设置小数位置。

我有一个在cad里批量除以一个数的LISP。其中《(setq newr (rtos (/ (atof old0) s0) 2 1))》的1就是决定小数点后保留1位的。请高手改一下&#xff0c;能否增加语句&#xff0c;能在cad里选择。现在&#xff0c;我是修改以后再加载&#xff0c;比较麻烦。lisp见下文。(加载命令…

基于Asterisk的VoIP开发指南——(1)实现基本呼叫功能

说明&#xff1a; 本文档探讨基于Asterisk如何实现VoIP的一些基本功能&#xff0c;包括基本呼叫功能的方案选取、主叫号码透传、如何编写AsteriskAGI程序、Radius认证计费模块等。 本文档VoIP软终端使用X-Lite&#xff0c;其它终端均可以接入测试。 文章内容仅供参考,转载请注…

excel查重_发票查重工具,不止查重这么简单,你还可以体验这些新玩法

电子发票报销是目前所有行业的会计都要面对的一项重要工作&#xff0c;而目前电子发票报销的普遍方式都是打印报销&#xff0c;这样一来&#xff0c;会计就不得不面对企业员工将电子发票重复打印报销和篡改报销的风险&#xff0c;而其中&#xff0c;尤其以重复打印报销是会计不…

Android培训翻译_使你的程序感知位置

Dependencies and prerequisites Android 1.0 or higher (2.3 for the sample app)You should also read Location and Maps 位置和地图Try it out 下载示例代码(LocationAware.zip) Users bring their mobile devices with them almost everywhere. One of the unique feature…

python导出dxf图_在PDMS中使用python直接生成管口方位图(开源分享第三集)

在PDMS中使用python直接生成管口方位图(开源分享第三集)距离上一次发推送已有5个月之久&#xff0c;上周立了冬&#xff0c;这二季我为五斗米折了腰&#xff0c;最近才缓过气来。令我没想到的是&#xff0c;大家竟然对这个主题这么有兴趣&#xff0c;有关注者几次在私信询问我什…

基于Asterisk的VoIP开发指南(2)——Asterisk AGI程序编写指南

5. Asterisk AGI程序编写指南 5.1概述 很多时候&#xff0c;我们需要在拨号方案中做某些业务逻辑的判断或者外部数据库的查询&#xff0c;根据具体地需要&#xff0c;有几种做法&#xff1a; 1&#xff0e;使用Asterisk的通道变量、Goto函数、Gotoif函数等实现某些简单跳转…

win7关闭休眠_【科普】笔记本电脑,待机/睡眠/休眠有啥区别?(ACPI SPM S0-S5)...

本文聊聊笔记本电脑话题下&#xff0c;经常有人问到的内容——关机 睡眠 休眠 这三个选项有什么区别&#xff1f;电脑可以不关机只合上盖子吗&#xff1f;花了俩小时&#xff0c;求个赞&#xff0c;希望有专栏能收这篇内容~先说答案&#xff1a;快速唤醒&#xff1a;开盖/操作鼠…

k8s dashboard_【大强哥-k8s从入门到放弃02】Kubernetes1.17部署Dashboard2.0

号外号外&#xff0c;后面所有提升视频都会更新到知乎和B站上去&#xff0c;不会直接发群里了&#xff0c;哈哈&#xff0c;能看懂这句话的我都认识&#xff0c;大家可以先关注一下&#xff0c;我知乎上的所有文档也会录成视频更多视频详见 杨哥天云&#xff1a;https://space.…

asterisk 扩展应用(3)——IVR 实现

1 IVR 实现1.1 简单IVR配置 1&#xff1a;进入System Recordings&#xff0c;上传wav语音文件。语音文件必须是音频采样为16位。音频采样级别8kHz。使用PCM编码。 2&#xff1a;进入freepbx IVR模块&#xff0c;建立菜单 3&#xff1a;对入特殊设置可以加入custo…

Andoid 采用ListView三种显示数据列表

Android系统中列表形式的显示方式应该是我们最熟悉不过的界面了&#xff0c;例如通讯录、通话记录、信息列表等等&#xff0c;例如下面的形式&#xff1a; 我们在开发项目需要用到这种形式显示信息时除了调用系统给我们提供的ListView控件以外我们还可以自定义该控件&#xff0…

url采集器_Linux「第三节」-centos7.5部署数据采集器Telegraf

Telegraf采集器采集数据后&#xff0c;会存储到influxdb数据库&#xff0c;然后grafana从influxdb读取数据&#xff0c;在grafana面板上展示&#xff0c;整体的流程就是这样。下面就演示下Telegraf、influxdb、grafana相互间的配置与衔接下载Telegrafwget https://dl.influxdat…

css宋体代码_html布局中统一设置文字字体样式

html组织中对立设置装备摆设笔墨字体名堂后&#xff0c;结构部份时候须要变幻从新设置装备摆设一种字体若何完成呢&#xff1f;贪图门径&#xff1a;结构时先一般会抗衡设置装备摆设整个网页字体&#xff0c;预防差距浏览器显露不同默认字体&#xff0c;而设置装备摆设字体css属…

Asterisk队列(Queue)振铃方式(ring strategy)

队列振铃方式有&#xff1a;ringall&#xff0c;roundrobin&#xff0c;leastrecent&#xff0c;fewestcalls&#xff0c;random&#xff0c;rrmemory。 ringall是呼叫所有可到达的分机直到有接听的。 roundrobin是轮流呼叫每一个可以达到的分机。 leastrecent是呼叫最近被这…

简述用UCenter整合第三方应用程序

UCenter除了对实现用户通行&#xff0c;各个应用通用信息的存储和处理之外&#xff0c;还有一个重要的功能就是开放的接口协议&#xff0c;其他第三方应用程序通过简单修改&#xff0c;即可很容易将程序纳入UCenter体系中来&#xff0c;和其他应用共享用户以及其他数据 &#x…

西门子主程序调用子程序_S7200Smart 子程序局部变量使用教程

全新的 S7-200 SMART 带来两种不同类型的 CPU 模块&#xff0c;标准型和经济型&#xff0c;全方位满足不同行业、不同客户、不同设备的各种需求。标准型作为可扩展 CPU 模块&#xff0c;可满足对 I/O 规模有较大需求&#xff0c;逻辑控制较为复杂的应用 &#xff1b;而经济型 C…

电脑怎么结束进程_深刻了解windows系统的任务管理器,电脑高手的成长之路

伙伴们我们每天都在用电脑&#xff0c;电脑和手机已经离不开了&#xff0c;可以说手机和电脑就是我们的左膀右臂。我们用电脑的时候&#xff0c;如果电脑卡了或者反应慢了&#xff0c;我们都会想到吧任务管理器调出来看看&#xff0c;可以说调出任务管理器就像医生看病一样&…