笨笨熊搬家交通篇
描述:森林裡的苯苯熊要喬遷新喜,上次他已經將物品打包完成,並約了朋友來幫忙。接下來他要選定乙個搬家的時間,想了很久,就決定在國慶節進行,因為國慶放假朋友們都有時間啦。但是在森林裡,從他現在房子到新豪宅,所經之地有山有水,路途曲折,甚至有些道路是不通的。
請你和他一起檢視指定的地圖,看看從笨笨熊現在的房子到新宅之間,道路是否是暢通的呢?
地圖是r行、c列的矩陣,矩陣的每乙個格仔剛好是一天的行程。
矩陣由「b」、「-」、「#」、「h」四種字元成員組成,其中:
b: 代表苯苯熊現在的房子;
h: 代表笨笨熊新的豪宅;
-: 代表可以通行的道路;
#: 代表無法通過的障礙(高山、大河等);
此外,森林裡也有交通規則地:在任務位置,只能向「上、下、左、右」四個方向中的其中乙個方向行走。
執行時間限制:
無限制記憶體限制:
無限制輸入:
4 // r的數值
4 // c的數值,下面是地圖。
--##---
b-----h
#---#--
-------
輸出:y //代表道路可達
或 n //代表道路不通
樣例輸入:
-b-h#
樣例輸出:
y思路:遞迴。從笨笨熊現在的房子處開始,分別從上下左右四個方向進行遞迴搜尋。在遞迴的時候,要注意不要像來的方向返回去找。如當前位置為(1,2),向上查詢時,到(0,2)位置處,在對(0,2)進行查詢時,就不要向下再次查詢(1,2)位置,不然會形成死迴圈。這個問題在**中由如**現:
1 != idir + i && 5 != idir + i
這裡特別說明下:
根據定義的方向陣列,int idirection[4][2] = , , , };//方向, 左右上下
idir是取二維陣列中行的下標,所以,idir= 0,表示向左;idir=1,向右;idir=2,向上;idir=3,向下
idir表示上乙個搜尋位置到當前搜尋位置的方向,如當前為(1,2),如果上乙個為(1,1),此時idir=2,表示從(1,1)到(1,2)是向右搜尋的。
i是對當前位置進行搜尋的四個方向,也是idirection[4][2]中一維的下標。接著剛才的例子,在對(1,2)進行搜尋時,就不能回到(1,1),即 i 在遍歷四個方向時,不能向左搜尋,即不能等於 0, 所以 i+idir != 1;
上下不能返回查詢, 即i+ idir != 5;(讀者可自行分析)
ps:如果陣列idirection[4][2]中定義的方向順序不一樣,這裡
#include #include #include //查詢路徑
//irow:地圖的總行數
//icol:地圖的總列數
// chinmap: 地圖,以為陣列形式輸入
//icur: 當前所在行
//icurcol: 當前所在列
//idir: 上個位置到當前位置的方向
//iisfirst: 是否是第一次呼叫,如果是第一次呼叫,需要找到起點(即老房子所在行列)
int findpath(int irow, int icol, char *chinmap, int icurrow, int icurcol, int iisfirst, int idir)
int idirection[4][2] = , , , };//方向, 左右上下
int iisbeak = 0;
if(iisfirst == 1)
{ int irow_i, icol_i;
//找到老房子
for (irow_i = 0; irow_i
笨笨熊搬家之交通篇
據說是華為的上機題,覺得挺有意思,拿來做做 森林裡的苯苯熊要喬遷新喜,上次他已經將物品打包完成,並約了朋友來幫忙。接下來他要選定乙個搬家的時間,想了很久,就決定在國慶節進行,因為國慶放假朋友們都有時間啦。但是在森林裡,從他現在房子到新豪宅,所經之地有山有水,路途曲折,甚至有些道路是不通的。請你和他一...
2014華為程式設計大賽題目 笨笨熊搬家打包篇
題目 笨笨熊搬家打包篇 森林裡的笨笨熊今天可開心啦 他買了新房子,喬遷新喜要搬家了。因此,笨笨熊請了許多好朋友來幫忙搬家,並準備了很多小紙盒用來裝需要搬的物品,不過,這些紙盒的容積都是相同的,並且最多只能裝兩個物品。但是,為了不打擾太多的朋友,笨笨熊想了個 聰明 辦法 讓每個紙盒使用效率最高 注 只...