hdu 2612 Find a way (廣搜)

Problem?Description
Pass?a?year?learning?in?Hangzhou,?yifenfei?arrival?hometown?Ningbo?at?finally.?Leave?Ningbo?one?year,?yifenfei?have?many?people?to?meet.?Especially?a?good?friend?Merceki.
Yifenfei’s?home?is?at?the?countryside,?but?Merceki’s?home?is?in?the?center?of?city.?So?yifenfei?made?arrangements?with?Merceki?to?meet?at?a?KFC.?There?are?many?KFC?in?Ningbo,?they?want?to?choose?one?that?let?the?total?time?to?it?be?most?smallest.?
Now?give?you?a?Ningbo?map,?Both?yifenfei?and?Merceki?can?move?up,?down?,left,?right?to?the?adjacent?road?by?cost?11?minutes.

?

Input
The?input?contains?multiple?test?cases.
Each?test?case?include,?first?two?integers?n,?m.?(2<=n,m<=200).?
Next?n?lines,?each?line?included?m?character.
‘Y’?express?yifenfei?initial?position.
‘M’????express?Merceki?initial?position.
‘#’?forbid?road;
‘.’?Road.
‘@’?KCF
Output
For?each?test?case?output?the?minimum?total?time?that?both?yifenfei?and?Merceki?to?arrival?one?of?KFC.You?may?sure?there?is?always?have?a?KFC?that?can?let?them?meet.
Sample?Input
4?4?
Y.#@
....?
.#..
@..M?
4?4
Y.#@
....
.#..?
@#.M?
5?5?
Y..@
.?.#.
..?.#
...?@
..M.?
#...#

?

Sample?Output
66
88
66

哈哈,這是第一次自己做廣搜的題目,wrong?answer?-?超時??這就是大半天。?

犯得主要錯誤:

1、沒有對連個隊列訪問的點進行標記,導致重復訪問。

2、總覺得廣搜首先搜出來的相遇地點就是最短的。

?????我同學一句話就把我點醒了,首先搜出來的是Y?M兩個距離相差最小的相遇地點,卻不是距離和最小的。

??????所以,最后還要找出距離和最小的那個相遇地點。

?

View Code
 1 #include<iostream>    
 2 #include<queue>    
 3 #define inf 0x7f7f7f7f7f
 4 using namespace std;    
 5             
 6 char map[210][210];    
 7 typedef struct    
 8 {    
 9     int x ,y;    
10     int step;    
11 }node;    
12 int vis_Y[210][210];    
13 int vis_M[210][210];    
14 int vis[210][210];    
15 int end_step[210][210];    
16 int dx[4] = {0,1,0,-1};    
17 int dy[4] = {1,0,-1,0};    
18 int n , m;    
19             
20 int bfs(node &temp , int i , int flag)    
21 {    
22     temp.x += dx[i];    
23     temp.y += dy[i];    
24     if(temp.x<0||temp.x>=n||temp.y<0||temp.y>=m) return 0; //越界    
25     if(flag)    
26         if(vis_Y[temp.x][temp.y]) return 0;  //已經訪問    
27     if(!flag)    
28         if(vis_M[temp.x][temp.y]) return 0;  //已經訪問    
29     if(map[temp.x][temp.y] == '#')  return 0;    
30     else if(map[temp.x][temp.y] == '.')    
31     {    
32         if(flag) vis_Y[temp.x][temp.y] = 1;    
33         else vis_M[temp.x][temp.y] = 1;    
34     }    
35     else if(map[temp.x][temp.y] == '@')    
36     {    
37         if(flag) vis_Y[temp.x][temp.y] = 1;    
38         else vis_M[temp.x][temp.y] = 1;    
39         vis[temp.x][temp.y]++;    
40         end_step[temp.x][temp.y] += temp.step+1;    
41     }    
42     temp.step++;    
43     return 1;    
44 }    
45 int main()    
46 {    
47     int i , j , min;    
48     while(cin>>n>>m)    
49     {    
50         memset(vis_Y , 0 , sizeof(vis_Y));    
51         memset(vis_M , 0 , sizeof(vis_M));    
52         memset(vis , 0 , sizeof(vis));    
53         memset(end_step , 0 , sizeof(end_step));    
54         min = inf;    
55         queue<node>q_Y;    
56         queue<node>q_M;    
57         node start_Y , start_M;    
58         for(i = 0; i < n; i++)    
59         {    
60             getchar();    
61             for(j = 0; j < m; j++)    
62             {    
63                 scanf("%c" , &map[i][j]);    
64                 if(map[i][j] == 'Y')    
65                 {start_Y.x = i; start_Y.y = j; start_Y.step = 0; vis_Y[i][j] = 1;}    
66                 else if(map[i][j] == 'M')    
67                 {start_M.x = i; start_M.y = j; start_M.step = 0; vis_M[i][j] = 1;}    
68             }    
69             map[i][j] = '\0';    
70         }    
71         q_Y.push(start_Y);    
72         q_M.push(start_M);    
73         while(!q_Y.empty() && !q_M.empty())    
74         {    
75             int flag = 0;    
76             node  temp1 = q_Y.front();    
77             node  temp2 = q_M.front();    
78             q_Y.pop();  q_M.pop();    
79             for(i = 0; i < 4; i++)    
80             {    
81                 node temp3 = temp1;    
82                 node temp4 = temp2;    
83                 if(bfs(temp3 , i , 1))    
84                     q_Y.push(temp3);    
85                 if(bfs(temp4 , i , 0))    
86                     q_M.push(temp4);    
87             }    
88         }    
89         for(i = 0; i < n; i++)    
90             for(j = 0; j < m; j++)    
91                 if(vis[i][j] == 2)     
92                 {    
93                     if(min > end_step[i][j])    
94                         min = end_step[i][j];    
95                 }    
96         cout<<min*11<<endl;    
97     }    
98     return 0;    
99 }

?

轉載于:https://www.cnblogs.com/nigel-jw/archive/2013/05/06/3063645.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259784.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259784.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259784.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Notepad++開發C#,一個復雜點的csscript腳本

使用Notepad開發C#&#xff0c;一個復雜點的csscript腳本&#xff1a; 12345678910111213141516171819//css_dir ....lib;//css_ref Geb.Image.dll;//css_ref Geb.Image.ShapeAnalysis.dll;//css_ref Geb.Utils.dll;//css_ref Geb.Utils.WinForm.dll;//css_co /unsafe; using S…

正則表達式里轉義字符_五分鐘搞定正則表達式,如果沒搞定,再加兩分鐘

五分鐘搞定正則表達式&#xff0c;如果沒搞定&#xff0c;再加兩分鐘【這是 ZY 第 18 篇原創文章】 文章概覽一、正則表達式介紹正則表達式&#xff0c;又稱規則表達式。&#xff08;英語&#xff1a;Regular Expression&#xff0c;在代碼中常簡寫為regex、regexp或RE&#xf…

百度富文本編輯器,改變圖片上傳存儲路徑

我用的是最新版&#xff01; 找到以下2個關鍵文件&#xff1a; YourPath.../Ueditor/php/config.json YourPath.../Ueditor/php/Uploader.class.php config.json找到如下代碼&#xff1a; "imagePathFormat": "...(這里不用管)",//找到imagePathFormat所在…

如何手動給Docker容器設置靜態IP

2019獨角獸企業重金招聘Python工程師標準>>> 要點&#xff1a; 1.首先需要在宿主機上虛擬出來一個真實可用橋接網卡比如br0 2.docker啟動的時候默認使用br0進行橋接網絡 3.創建docker容器的時候使用--netnone模式 4.手動為每個創建的容器生成靜態ip。但是ip每次在重…

獲取滾動條寬度代碼(記錄)

1.創建一個嵌套節點&#xff0c;讓外層節點產生滾動條。 2.用offsetWidth - clientWidth 即可獲得滾動條寬度。 為了避免頁面抖動&#xff0c;可以設置外層元素position:absolute和visibility:hidden 代碼如下&#xff1a; 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHT…

的函數原型_JS基礎函數、對象和原型、原型鏈的關系

JS的原型、原型鏈一直是比較難理解的內容&#xff0c;不少初學者甚至有一定經驗的老鳥都不一定能完全說清楚&#xff0c;更多的"很可能"是一知半解&#xff0c;而這部分內容又是JS的核心內容&#xff0c;想要技術進階的話肯定不能對這個概念一知半解&#xff0c;碰到…

python字符串基本操作

直接上圖&#xff1a; ispace()是否為空格 isupper()與islower是否為大寫或小寫 isdigit是否為數字 isalpha是否為字母 isalnum()是否為字母與數字混合體 startswith()與endswith()判斷是否以什么開始&#xff0c;以什么結尾轉載于:https://www.cnblogs.com/bestSmile/p/405550…

遷移學習自我學習

最近在看Ng的深度學習教程&#xff0c;看到self-taught learning的時候&#xff0c;對一些概念感到很陌生。作為還清技術債的一個環節&#xff0c;用半個下午的時間簡單搜了下幾個名詞&#xff0c;以后如果會用到的話再深入去看。 監督學習在前一篇博客中討論過了&#xff0c;這…

堰流實驗報告思考題_堰流流量系數測定實驗

二、實驗操作部分1&#xff0e;實驗操作過程(可用圖表示)2&#xff0e;實驗數據、表格及數據處理3&#xff0e;結論1.實驗步驟(1)放水之前&#xff0c;用活動測針測出堰前槽底高程▽低和堰頂高程▽堰頂&#xff0c;堰高P▽堰頂-▽底。(2)關閉首部的泄水閥&#xff0c;打開進水閥…

WCF全雙工以及用戶名密碼驗證

WCF是支持TCP雙向連接的&#xff0c;支持Server和Client之間互發協議&#xff0c;通過 訂閱-發布 的全雙工形式實現&#xff0c;全雙工的用戶名密碼驗證需要X509證書加密&#xff0c;單工模式的用戶名密碼驗證時&#xff0c;X509證書是可選的。 在全雙工模式下&#xff0c;會有…

MTV: Django眼中的MVC

URLconfMTV&#xff1a;Django眼中的MVC MVC是眾所周知的模式&#xff0c;即&#xff1a;將應用程序分解成三個組成部分:model(模型),view(視圖),和 controller(控制 器)。其中&#xff1a;M 管理應用程序的狀態&#xff08;通常存儲到數據庫中&#xff09;&#xff0c;并約束改…

createbitmap導致的內存泄漏如何處理_C++ 如何避免內存泄漏,一篇就夠

前言近年來&#xff0c;討論 C 的人越來越少了&#xff0c;一方面是由于像 Python&#xff0c;Go 等優秀的語言的流行&#xff0c;另一方面&#xff0c;大家也越來越明白一個道理&#xff0c;并不是所有的場景都必須使用 C 進行開發。Python 可以應付大部分對性能要求不高的場景…

Visio繪制功能分解圖

為什么要繪制功能分解圖&#xff1f; 對于編程人員來說&#xff0c;具體分配任務的時候&#xff0c;必須知道自己要做什么&#xff0c;必須了解系統的大體框架。功能分解圖可以幫助我們理清程序的框架&#xff0c;便于大局觀的掌握。 用Visio2010創建功能分解圖 1、選擇模版 2、…

Heka:Go編寫,來自Mozilla,高效、靈活的插件式數據挖掘工具(轉)

轉自&#xff1a;http://www.csdn.net/article/2013-05-02/2815116-introduce-from-mozilla-heka-go摘要&#xff1a;一直崇尚開源的Mozilla近日釋放了Heka測試版——插件架構&#xff0c;Go編寫。在支持使用Go擴展功能的同時&#xff0c;還通過允許“Sandboxed Filters”提供了…

cocos2d學習筆記2——學習資源

1. 視頻 找了好幾個視頻&#xff0c;有一些講得好的文件資源沒有&#xff0c;后來終于找到一個講得不錯還有文件資源的&#xff0c;還有高清下載地址&#xff0c;雖然是2.2版本的&#xff0c;但是確實能學到不少東西&#xff0c;對用cocos2d做游戲有了基本的印象&#xff0c;對…

深究標準IO的緩存

前言 在最近看了APUE的標準IO部分之后感覺對標準IO的緩存太模糊&#xff0c;沒有搞明白&#xff0c;APUE中關于緩存的部分一筆帶過&#xff0c;沒有深究緩存的實現原理&#xff0c;這樣一本被吹上天的書為什么不講透徹呢&#xff1f;今天早上爬起來趕緊找了幾篇文章看看&#x…

環境變量_配置JAVA環境變量

本文標識 : J00001本文編輯 : YiKi編程工具 : IDEA閱讀時長 : 3分鐘什么是環境變量?環境變量是在操作系統中一個具有特定名字的對象&#xff0c; 它包含了一個或者多個應用程序所將使用到的信息。為什么要配置環境變量?為了方便在控制臺編譯和運行java程序&#xff0c;不…

GotFocus和PreviewLeftButtonDown事件

當TextBox獲得焦點后&#xff0c;其中的文字會被全選。通過GotFocus和PreviewLeftButtonDown事件&#xff0c;就可以模擬上述行為。 如果用戶只是用鍵盤操作&#xff0c;GotFocus事件就足夠了。 如果使用鼠標操作&#xff0c;就要用到2個事件了。TextBox會將光標放在鼠標單擊的…

模式主節點ORACLE DG介紹(物理無實例)

在本文中,我們主要介紹模式主節點的內容,自我感覺有個不錯的建議和大家分享下 DG的三種模式&#xff1a; 硬件以及操縱系統需求&#xff1a; 每日一道理 流逝的日子像一片片凋零的枯葉與花瓣&#xff0c;漸去漸遠的是青春的純情與浪漫。不記得曾有多少雨飄在胸前風響在耳畔&…

分布式消息隊列 Kafka

分布式消息隊列 Kafka 2016-02-25 杜亦舒Kafka是一個高吞吐量的、分布式的消息系統&#xff0c;由Linkedin開發&#xff0c;開發語言為scala具有高吞吐、可擴展、分布式等特點 適用場景 活動數據統計活動數據包括頁面訪問量&#xff08;Page View&#xff09;、被查看內容方面的…