## 森林裡的苯苯熊要喬遷新喜,上次他已經將物品打包完成,並約了朋友來幫忙。接下來他要選定乙個搬家的時間,想了很久,就決定在國慶節進行,因為國慶放假朋友們都有時間啦。但是在森林裡,從他現在房子到新豪宅,所經之地有山有水,路途曲折,甚至有些道路是不通的。
請你和他一起檢視指定的地圖,看看從笨笨熊現在的房子到新宅之間,道路是否是暢通的呢?
地圖是r行、c列的矩陣,矩陣的每乙個格仔剛好是一天的行程。
矩陣由「b」、「-」、「#」、「h」四種字元成員組成,其中:
b:代表苯苯熊現在的房子;
h:代表笨笨熊新的豪宅;
-:代表可以通行的道路;
#:代表無法通過的障礙(高山、大河等);
此外,森林裡也有交通規則地:在任務位置,只能向「上、下、左、右」四個方向中的其中乙個方向行走。
執行時間限制: 無限制
記憶體限制: 無限制
輸入: 4 // r的數值
4 // c的數值,下面是地圖。
-##-
b–h
#-#-
輸出: y //代表道路可達
或 n //代表道路不通
樣例輸入: 1
5 -b-h#
樣例輸出: y
在乙個二維陣列中分別用raod[i][j]=0來表示到座標(i,j)點的道路不可通行和road[i][j]=1來表示到座標點(i,j)的道路是可通行的。同時,用乙個布林型二維陣列flag來標誌某點座標是否被訪問過,通過將road和flag以及座標點a和b作為引數,從起點位置開始進行迭代,分別從上、下、左、右四個方向遍歷所有座標點,同時標誌該點已經被訪問,不需要再訪問,若可以訪問到終點座標,則返回true,否則返回false。對於每個座標點都需要從上下左右四個方向迭代遍歷,每次迭代遍歷前都需要首先進行座標合法,該點是否已遍歷,已經該點是否可通行的判斷。
#include
#include
using
namespace
std;
static
int r,c;
static
int destx,desty;
bool findpath(int **road,int a,int b,bool **flag)
if(a+1
1][b]==0 && road[a+1][b]==1)
if(b-1>=0 && flag[a][b-1]==0 && road[a][b-1]==1)
if(b+1
1]==0 && road[a][b+1]==1)
return
false;
}int main()
for(int i=0; ifor(int j=0; jif(p[i][j]=='#')
road[i][j]=0;
else
if(p[i][j]=='-')
road[i][j]=1;
else
if(p[i][j]=='b')
else
if(p[i][j]=='h')
}/*除錯使用
動態規劃 一
在現實生活中,有一類活動的過程,由於它的特殊性,可將過程分程若干個互相聯絡的階段,在它的每一階段都需要作出決策,從而使整個過程達到最好的活動效果。當然,各個階段決策的選取不是任意確定的,它依賴於當前面臨的狀態,又印象以後的發展,當各個階段決策確定後,就組成乙個決策序列,因而也就確定了整個過程的一條活...
動態規劃(一)
動態規劃的兩種常用形式 1 遞迴型 在函式中呼叫自身 優點 直觀,容易編寫 缺點 可能會因為遞迴層數太深導致爆棧,函式呼叫帶來額外時間開銷。無法使用滾動陣列節省空間。總體來說,比遞推型慢。2 遞推型 for迴圈 效率高,有可能使用滾動陣列節省空間。有的問題只能用遞迴解決,有的問題既可以用遞迴,也可以...
動態規劃 (一)
對於動態規劃的學習總共進行了兩節課,到現在為止還是一頭霧水,雖然看懂了老師上課講的例題,但是做v judge的時候還是都不太會,我主要認為我只知道了動態規劃的基本思想,就是將乙個大的問題,分成若干個小問題,但與貪心演算法不同的是,動態規劃中的每乙個小問題之間都相互影響,在每一步都取得最優解,且在不斷...