定義乙個二維陣列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 50 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...