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...