poj3009 Curling 2.0 深搜

PS:以前看到题目这么长就没写下去了。今天做了半天,没做出来。准备看题解,打开了网站都忍住了,最后还是靠自己做出来的。算是一点进步吧。

分析:

  题目的意思没明白或者理解有偏差都没办法做题。看样例3和样例4,数据差不多的,但是一个输出4,但是另外的一个却是-1。再去看题目就会发现,题目的意思是在撞碎石头之前必须走一个为值0的格子。我理解为需要加速。对样例4,答案4是这样出来的:初始位置为(1,3),第一步是到达(1,2),并且使得(1,1)点的值为0(撞碎了这里的石头,0代表可以通行);第二步是到达(1,3),并且是得(1,4)点的值为0;第三步是到达(1,4),并且使得(1,5)的值为0;第四步是到达(1,5),发现到达了终点,结束。样例5也可以这样得到。

  样例6错误的原因是因为超过了10步,这是题目的要求,超过10步就当不能到达处理。

  这样一来,可以知道了起点和终点的处理了。起点(终点)的坐标记录下来,但是标记为0。

  还有就是实现如何对一个方向进行搜索,以及如何标记在撞石头之前已经走过0的位置(不能是这种情况:起点是0,下一点就撞石头)。这思考一下就可以实现了。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 void DFS(int x,int y,int di);
 8 const int N=22,INF=0x3f3f3f3f;
 9 bool vis[N][N];
10 int r,c,t,ex,ey,sx,sy,mx;
11 int dx[4]={0,0,1,-1};
12 int dy[4]={1,-1,0,0};
13 bool isin(int x,int y)
14 {
15     return x>=0&&x<r&&y>=0&&y<c;
16 }
17 void DDFS(int a,int b,int x,int y,int d)
18 {
19     int i,j;
20     if(t>10) return ;
21     i=x+a; j=y+b;
22     if(!isin(i,j)) return ;
23     if(!vis[i][j])
24     {
25         d=1;
26         if(i==ex&&j==ey)
27         {
28             mx=min(t,mx);
29         }
30         DDFS(a,b,i,j,d);
31     }
32     else if(vis[i][j]&&d)
33     {
34         vis[i][j]=0;
35         d=0;
36         t++;
37         DFS(x,y,d);
38         t--;
39         vis[i][j]=1;
40     }
41 }
42 void DFS(int x,int y,int d)
43 {
44 
45     for(int k=0;k<4;k++)
46     {
47         DDFS(dx[k],dy[k],x,y,d);
48     }
49 }
50 int main()
51 {
52     //freopen("test.txt","r",stdin);
53     while(scanf("%d%d",&c,&r)!=EOF&&c)
54     {
55         int x;
56         for(int i=0;i<r;i++){
57             for(int j=0;j<c;j++){
58                 scanf("%d",&x);
59                 if(x==3)
60                 {
61                     ex=i;ey=j;
62                     vis[i][j]=0;
63                 }
64                 else if(x==2)
65                 {
66                     sx=i;sy=j;
67                     vis[i][j]=0;
68                 }
69                 else vis[i][j]=x;
70             }
71         }
72         t=1;
73         mx=INF;
74         DFS(sx,sy,0);
75         if(mx==INF) printf("-1\n");
76         else printf("%d\n",mx);
77     }
78     return 0;
79 }
View Code

  DFS(x,y,d) : (x,y)是起点的坐标,d是标记是否有经过被标记0的点。1表示经过了,0表示没有。

  DDFS(a,b,x,y,d) :(a,b)是方向向量,表明向什么方向搜索;x,y,d同上。

  通过d的记录就可以知道石头可不可以撞碎。使用(a,b)就可以沿着同一方向一直深入。

 

转载于:https://www.cnblogs.com/Potato-lover/p/4114002.html

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

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

相关文章

Android监听事件

ListView事件监听&#xff1a; setOnItemSelectedListener 鼠标滚动时触发 setOnItemClickListener 点击时触发 EditText事件监听&#xff1a; setOnKeyListener 获取焦点时触发 RadioGroup事件监听&#xff1a; setOnCheckedChangeListener 点击时触发 CheckBox事件监听&#…

子类能不能继承父类的构造方法?

class A{ public A(){} // 1:无参数构造方法。 public A(String s){} // 2.}class B extends A{ public B(String s){ super(s); // 3. }}说明&#xff1a;如果没有1处的无参数构造方法&#xff0c;那么3处一定要主动调用父类带参数的构造方法。如果有1处的构造方法&#…

基于原生javascript的ajax实现

function getXMLHttpRequest(){if(window.ActiveXObject){//用户是ie浏览器http_requestnew ActiveXObject("Microsoft.XMLHTTP");}else{//其他的浏览器http_requestnew XMLHttpRequest();}return http_request;}var httpRequest;function name(){httpRequestgetXMLH…

Google File System设计方面的问题汇总

1、Google File System概述 google file system是一个分布式文件系统&#xff0c;针对的是数据密集型应用&#xff0c;提供容错功能&#xff0c;运行在低廉的服务器上&#xff0c;同时给大量的用户提供高性能服务。尽管google file system有着传统的分布式文件系统的目标&#…

linux phpize

phpize是什么 1、phpize是用来扩展php扩展模块的&#xff0c;通过phpize可以建立php的外挂模块。 当php编译完后&#xff0c;在bin下面会有phpize这个脚本文件&#xff0c; 在编译你要添加的扩展模块之前&#xff0c;执行以下phpize就可以了&#xff1b; 比如现在想在php中加入…

一些常用的正则表达式

较验邮箱&#xff1a; var EmailReg /^[-_A-Za-z0-9]([_A-Za-z0-9]\.)[A-Za-z0-9]{2,3}$/; 身份证号码&#xff1a; var reg /(^\d{15}$)|(^\d{17}(\d|X)$)/; 15位身份证号 //身份证15位时&#xff0c;次序为省&#xff08;3位&#xff09;市&#xff08;3位&#xff…

iOS iphone屏幕分析(岂止而大)

在写本文前&#xff0c;我必须介绍几点内容&#xff1a;第一点&#xff1a;屏幕上面显示的内容多少和屏幕的尺寸大小无关第二点&#xff1a;屏幕上面显示的内容多少和分辨率完全无关第三点&#xff1a;屏幕上面显示的内容多少和屏幕尺寸、屏幕分辨率、PPI等都是无关的那到底什么…

js的一些实现

响应回车键提交表单 //*******************************************************响应回车键登录****************************************************************** document.οnkeydοwnfunction(event){ var e event || window.event || arguments…

【随笔】Win7下GVIM的安装与配置

针对各种语言的编辑器千千万万&#xff0c;最好的就是最适合自己的&#xff0c;这句话一点没错。 偶然间&#xff0c;需要在Windows上编写代码&#xff0c;MyEclipse等太大&#xff0c;完全没有必要&#xff0c;所以就想起来了vim这个神器。个子小&#xff0c;功能强&#xff0…

java遍历Set集合

在Java中使用Set,可以方便地将需要的类型&#xff0c;以集合类型保存在一个变量中.主要应用在显示列表. Set是一个不包含重复元素的collection。更确切地讲&#xff0c;set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2&#xff0c;并且最多包含一个 null 元素。 import java.u…

Java switch语句

在Java7之前&#xff0c;switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。 Java7可以使用String作为判断条件 public class Test { public void test(String str) { switch(str) { case "abc": …

find之exec和args

本来以为以前的差不多够用了。呵呵&#xff0c;看到很多高手用高技巧&#xff0c;心痒痒的觉得我自己还可以提升啊。。哈哈哈。 这个实践起来之后&#xff0c;&#xff0c;SED,AWK也得深化一下&#xff0c;&#xff0c;&#xff0c;SHELL和PYTHON&#xff0c;作运维的两样都不能…

Java 字符串分割陷阱

Java中关于字符串有一个split方法&#xff0c;这个方法可以实现分割字符串的作用&#xff1b; 但是如果使用一些正则表达式中出现的字符时Java编译器会报错&#xff0c; 如&#xff1a; String str "com.zhangsan.lisi.wangwu"; String[] strArray str.split(…

Linux 复习重点目录

Linux安全复习 一、Linux基本命令 1、文件管理命令 lvm 2、用户管理命令 3、网络管理命令 4、权限管理 普通权限和特殊权限 权限命令修改 5、服务命令 6、软件安装管理命令 yum安装 prm包安装 源码包安装 7、vim 、cat 、more、less文件处理 8、进程管理 top、ps、计划任务、守…

java Math 方法

Math.round(12.49)12; Math.round(12.50)13; Math.round(0.5)1; Math.round(0.49)0; Math.round(-0.51)-1; Math.round(-0.5)0; Math.floor(-0.50)-1.0; Math.floor(-0.001)-1.0; Math.floor(12.50)12.0; Math.floor(12.99)12.0;

LeetCode First Missing Positive

Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] return 3,and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. 解题思路&#xff1a;数组总共有n个数&#xff0c;若都是连续的…

[java] 虚拟机(JVM)底层结构详解[转]

[java] 虚拟机(JVM)底层结构详解[转] 本文来自&#xff1a;曹胜欢博客专栏。转载请注明出处&#xff1a;http://blog.csdn.net/csh624366188 在以前的博客里面&#xff0c;我们介绍了在java领域中大部分的知识点&#xff0c;从最基础的java最基本语法到SSH框架。这里面应该包含…

jquery扩张函数

//jquery扩展函数判断是否是手机号码 $.fn.isMobile function(){ alert("zhangsan"); var tmptxt$(this).val().trim(); var RegEx/^1[3|4|5|8][0-9]\d{8}$/;return RegEx.test(tmptxt); }; //jquery扩展函数判断是否是固定电话 $.fn.isTel function()…

用计算器计算“异或CRC”

再计算器上输入以下数字&#xff0c;每输入一个数字&#xff0c;按一下“Xor” 转载于:https://www.cnblogs.com/YangBinChina/p/4164513.html

Java正则表达式较验手机号、邮箱

import java.util.regex.Matcher; import java.util.regex.Pattern; public class PatternTest { /** * 验证邮箱地址是否正确 * param email * return */ public static boolean checkEmail(String email){ boolean flag false; try{ String check "^([a-z0…