牛客網上,華為迷宮問題

2021-07-15 22:31:29 字數 1720 閱讀 2012

定義乙個二維陣列n*m(其中2<=n<=10;2<=m<=10),如5 × 5陣列下所示: 

int maze[5][5] = ;

它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。入口點為[0,0],既第一空格是可以走的路。

input

乙個n × m的二維陣列,表示乙個迷宮。資料保證有唯一解,不考慮有多解的情況,即迷宮只有一條通道。

output

左上角到右下角的最短路徑,格式如樣例所示。

sample input

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

sample output

(0, 0)

(1, 0)

(2, 0)

(2, 1)

(2, 2)

(2, 3)

(2, 4)

(3, 4)

(4, 4)

輸入描述:

輸入兩個整數,分別表示二位陣列的行數,列數。再輸入相應的陣列,其中的1表示牆壁,0表示可以走的路。資料保證有唯一解,不考慮有多解的情況,即迷宮只有一條通道。

輸出描述:

左上角到右下角的最短路徑,格式如樣例所示。

輸入例子:

5 5

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

輸出例子:

(0,0)

(1,0)

(2,0)

(2,1)

(2,2)

(2,3)

(2,4)

(3,4)

(4,4)

解答如下:
#include 

#include

using namespace std;

typedef struct point

step;

bool should_continue(stack

sta,step end)//while條件判斷,是否執行到出口位置

int main()

;//記錄該結點是否已經訪問過

stack

sta;

step begin,end,now;//記錄起始結點

begin.x=0;begin.y=0;

end.x=n-1;end.y=m-1;

now=begin;

sta.push(begin);

flag[0][0]=1;

while(!should_continue(sta,end))

else if(now.x<=n-1 && now.y+1<=m-1 && maze[now.x][now.y+1]==0 && flag[now.x][now.y+1]==0 )//向右走

else//後退

}stack

stb; while(!sta.empty()) while(!stb.empty()) { cout<<"("<

<<","<

<<")"<

牛客華為機試題

題目描述 開發乙個座標計算工具,a表示向左移動,d表示向右移動,w表示向上移動,s表示向下移動。從 0,0 點開始移動,從輸入字串裡面讀取一些座標,並將最終輸入結果輸出到輸出檔案裡面。輸入 合法座標為a 或者d或者w或者s 數字 兩位以內 座標之間以 分隔。非法座標點需要進行丟棄。如aa10 a1a...

牛客 走迷宮 模擬 離線

題目大意 給出乙個走迷宮的策略 while 1 sum k 總步數實時更新 y right 1 更新y座標 up 邊界改變 下同,就不一一贅述了 else if state 1 sum k x down 1 right else if state 2 sum k y left 1 down else...

牛客網 華為機試 020 牛客網

密碼要求 1.長度超過8位 2.包括大小寫字母.數字.其它符號,以上四種至少三種 3.不能有相同長度超2的子串重複 說明 長度超過2的子串 一組或多組長度超過2的子符串。每組佔一行 如果符合要求輸出 ok,否則輸出ng 示例1 021abc9000 021abc9abc1 021abc9000 02...