日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Problem -B DBZ的钥匙

發(fā)布時間:2024/3/13 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Problem -B DBZ的钥匙 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

分析: ?這個題其實不難,就是在常規(guī)的BFS上多了一個BFS,即兩個BFS而已!使用一個for循環(huán)即可求出來!以前做過很多BFS的題,這道題其實和那些都差不多,就是在數(shù)據(jù)上需要自己做點功夫,將字符串的地圖改變?yōu)檎麛?shù)型的地圖即可!


思路:1.首先輸入地圖,然后設立兩個int型的起點和終點數(shù)組用來存起點和終點;

? ? ? ? ? ? ? ? ?同時在字符串的地圖中,如果此處可走,在對應的整數(shù)型的地圖中標記為1,不能走的地方標記為0;

? ? ? ? ? ? 2.由于題目要求:如果找不到鑰匙或者或者找到了鑰匙但是不能把鑰匙給DBZ的話,同樣視為不成功,即輸出“DBZ cheat us”;

? ? ? ? ? ? 3.基于第二點,可以設立一個標記,在所寫的for循環(huán)中,只要有一次ans[i]==0,那么表明失敗!

? ? ? ? ? ? 4.這個就看自己的想法了,可以使用數(shù)組寫隊列,也可以使用C++標準模板庫寫隊列,當然我覺得后者更簡單咯!

? ? ? ? ? ? 5.剩下的就是細節(jié)方面了,這個多想想應該就沒問題了!


代碼如下:

#include<cstdio> #include<iostream> #include<cstring> #include<queue> using namespace std; char Map[520][520]; int map[520][520]; int n,m,sx[2],sy[2],dx[2],dy[2],ans[2]; int xx[4]= {1,0,-1,0}; int yy[4]= {0,1,0,-1}; bool vis[520][520]; struct node {int x,y,ti; }; bool bfs() {for(int ss=0; ss<2; ss++){memset(vis,false,sizeof(vis));vis[sx[ss]][sy[ss]]=true;queue<node>Q;node now;now.x=sx[ss];now.y=sy[ss];now.ti=ans[ss];Q.push(now);while(!Q.empty()){node te=Q.front();Q.pop();if(te.x==dx[ss]&&te.y==dy[ss]){ans[ss]=te.ti;break;//cout<<"eee--->"<<ans[ss]<<endl;}for(int i=0; i<4; i++){int X=xx[i]+te.x;int Y=yy[i]+te.y;if(map[X][Y]&&!vis[X][Y]&&X>=0&&X<n&&Y>=0&&Y<m){vis[X][Y]=true;node num;num.x=X;num.y=Y;num.ti=te.ti+1;Q.push(num);}}}if(!ans[ss])return false;}return true; } int main() {while(cin>>n>>m){ans[0]=ans[1]=0;getchar();memset(map,1,sizeof(map));for(int i=0; i<n; i++){for(int j=0; j<m; j++){cin>>Map[i][j];if(Map[i][j]=='.')map[i][j]=1;if(Map[i][j]=='*')map[i][j]=0;if(Map[i][j]=='S'){sx[0]=i;sy[0]=j;}if(Map[i][j]=='X'){dx[0]=i;dy[0]=j;sx[1]=i;sy[1]=j;}if(Map[i][j]=='E'){dx[1]=i;dy[1]=j;}}getchar();}if(bfs())cout<<ans[0]+ans[1]<<endl;elsecout<<"DBZ Cheat Us"<<endl;}return 0; }





Description

? ? ? ?古有富可敵國萬三千,今有富可敵球DBZ。話說DBZ有一輛超級林肯加長,它的車頭在都江堰,而車尾卻在川大,經過數(shù)月之久她終于到達了咱們成都東軟學院,引來無數(shù)人圍觀。可粗心的DBZ卻不知道將車的鑰匙丟在了車的何處,于是富可敵球的他懸賞50000000000萬(當然這對于他來說都是小Case ^_^),公開懸賞找鑰匙。作為咱東軟學院平凡的你,肯定不想錯失這一次難得變?yōu)楦吒粠洝赘幻赖臋C會。若你想拿到獎金,那么你就需要用最快的方式找到鑰匙,并且拿給DBZ。

Input

? ? ? ?測試數(shù)據(jù)包含多組。

? ? ? ?每組測試數(shù)據(jù)第一行包含2個數(shù) n ( 1 < = n < = 500 ) , m ?( 1 < = m < = n ) ,代表車的長和寬。

? ? ? ?接下來包含n行,每行m個元素( 其中 '.' 代表可以通過的路徑, 'X' 代表鑰匙所在地, '*'代表障礙物, 'E' 代表DBZ鎖在地, 'S'代表你所在的位置。 每次你只能上下左右進行移動。

Output

? ? ?輸出僅包含一行,即把鑰匙交給DBZ的最小時間,如果無法成功找到鑰匙或找到鑰匙無法成功交給DBZ,則輸出“DBZ Cheat Us"(沒有引號)。

Sample Input

4 4S.*...X.E.......4 4S.*..*X..***E...

Sample Output

6DBZ Cheat Us

總結

以上是生活随笔為你收集整理的Problem -B DBZ的钥匙的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。