方格迷宮(矩陣加回溯)

2021-08-04 21:40:55 字數 1474 閱讀 5917

問題

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