迷宮奪寶 C語言

2021-10-24 07:05:49 字數 1647 閱讀 6719

1.1 題目要求

乙個n x n的矩陣代表了乙個迷宮,迷宮中每個房間由以下三種數字的一種來表示:

0 代表房間安全,是可以通過的。

1 代表房間中有獎勵物品,玩家可以拿到獎勵並通過房間。

-1 代表房間中有障礙,玩家不能通過房間。

你的任務是在遵守下列規則的情況下,盡可能多的拿到獎勵:

玩家從起始位置 (0, 0) 出發,到達終點(n-1, n-1) ,只能向下或向右走,並且只能穿越有效的房間(即只可以穿過值為0或者1的房間);當到達 (n-1, n-1) 後,完成走動過程;當你經過乙個房間且這個房間有獎勵時,拿到獎勵後這個房間會變成空的(值變為0);如果在(0, 0)和(n-1, n-1)之間不存在一條可經過的路徑,則沒有獎勵能被拿到。

思路:dp + dfs 先找到能獲得最大的獎勵,再通過dfs從後往前找路徑

#include

#include

#define len 4

int matrix[len]

[len]=;

int dp[len +1]

[len +1]

=;int route[len +1]

[len +1]

=;void

printnums

(int

(*matrix)

[len]

)printf

("\n");

}}void

printdp

(int

(*matrix)

[len +1]

)printf

("\n");

}}intmax

(int num1,

int num2)

intfindmaxvalue

(int

(*matrix)

[len])}

} maxvalue = dp[len]

[len]

;return maxvalue;

}void

dfs(

int i,

int j)

if(j >=2&&

(dp[i]

[j]== dp[i]

[j-1

]|| dp[i]

[j]== dp[i]

[j-1]+

1))if

(i >=2&&

(dp[i]

[j]== dp[i-1]

[j]|| dp[i]

[j]== dp[i-1]

[j]+1)

)}void

findroute

(int maxvalue)

else

if(dp[i]

[j-1

]== maxvalue)

else

else}}

}void

main()

實驗結果圖:

沒加return 遞迴過程會出現左和上兩個分支去探測

C語言 迷宮(棧實現)

problem i 迷宮 全部 自己編寫 description 編寫乙個程式求解迷宮問題。迷宮是乙個n行m列的矩陣,其中 0 表示無障礙,1 表示有障礙。設入口為 1,1 出口為 n,m 每次移動只能從乙個無障礙的單元移到其周圍4個方向上任一無障礙的單元。若該迷宮存在一條從入口到出口的路徑,則輸出...

棧實現迷宮(c語言)

利用棧實現迷宮問題,1 輸入迷宮的大小m行n列,兩者為整數。2 由隨機數產生0或1,建立迷宮。3 輸出資料。4 首先輸出迷宮,在列印由入口到出口的入線。如無通道,則列印出無。include include include include define maxsize 100 define row 6...

C語言迷宮求解 完結版

定義狀態常量 define overflow 2 define error 0 define null 0 define true 1 define true 1 define false 0 define false 0 define stack init size 100 define stac...