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.pswp.cn/news/273507.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273507.shtml
英文地址,請注明出處:http://en.pswp.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…