問題
j: 方格迷宮
題目描述
設有乙個
n*n(2<=n<10)
方格的迷宮,入口和出口分別在左上角和右上角。迷宮格仔中分別放0和
1,0表示可通,
1表示不能,入口和出口處肯定是
0。迷宮走的規則如下所示:即從某點開始,有八個方向可走,前進方格中數字為
0時表示可通過,為
1時表示不可通過,要另找路徑。找出所有從入口(左上角)到出口(右上角)的路徑
(不能重複
),輸出路徑總數,如果無法到達,則輸出0。
輸入第一行是
1個正整數
n(2<=n<10)
,表示迷宮規模是
n*n的。接下來
n行是乙個
n*n的
0-1矩陣。 輸出
找出所有從入口(左上角)到出口(右上角)的路徑
(不能重複
),輸出路徑總數,如果無法到達,則輸出0。
樣例輸入 3
0 0 0
0 1 1
1 0 0
樣例輸出 2
純水題,只是我做的時候還不會用bfs,所以用了回溯加矩陣,用乙個2n*2n的矩陣儲存點,其中一半用來存點,一般用來存點與點之間的關係,本題是用來標記兩點是否連通過。
**如下:
#include #include #include #include #include using namespace std;
const int n=25;
int a[n][n]; /*構建矩陣*/
int n;
int sum=0;
void dfs(int x,int y)
if(y+1<=n&&a[x*2-1][2*y]==0&&
!a[x*2-1][(y+1)*2-1])
if(x-1>=1&&y+1<=n&&a[(x-1)*2][y*2]>=0&&
!a[(x-1)*2-1][(y+1)*2-1])
if(x+1<=n&&a[x*2][2*y-1]==0&&
!a[(x+1)*2-1][y*2-1])
if(x-1>=1&&a[(x-1)*2][2*y-1]==0&&
!a[(x-1)*2-1][y*2-1])
if(y-1>=1&&a[2*x-1][2*y-2]==0&&
!a[x*2-1][(y-1)*2-1])
if(x+1<=n&&y-1>=1&&a[x*2][(y-1)*2]>=0&&
!a[(x+1)*2-1][(y-1)*2-1])
if(x-1>=1&&y-1>=1&&a[(x-1)*2][(y-1)*2]<=0&&
!a[(x-1)*2-1][(y-1)*2-1])
}}int main()
只是自己摸索出來的一種矩陣用法,因為bfs太常見,所以就不發bfs,這道題還是bfs比較好用,不用考慮很多。
序列匹配加回溯
題目 lect6 序列匹配 方法一 普通二維陣列序列匹配 開陣列回溯 int maxscore string word1,string word2,int r for int j 0 j len2 j for int i 1 i len1 i else tl temp i 1 j 1 1 l tem...
迷宮(回溯演算法)
要想解決迷宮問題,首先搞明白八皇后,迷宮問題是回溯和貪心的產物。題目 現有乙個迷宮如圖 黃色五角星為迷宮的起點,紅色五角星為迷宮的終點。要求 找到從起點到終點的所有路線。思路 我們的目的為了到達終點,所以一定要向著終點的方向出發。因為迷宮的終點在起點的右下角。所以我們選擇路徑時先考慮向下走,走不通考...
迷宮回溯 遞迴
1.什麼是遞迴?自己呼叫自己,每次傳入的方法引數不同。2.需求 終止條件,和遞迴規律 package com public class mul 設定擋板 map 3 1 1 map 3 2 1 map 1 2 1 map 4 4 1 map 4 5 1 列印地圖 for int a map syst...