搜尋 P1605 迷宮

2021-09-03 01:29:54 字數 2025 閱讀 4750

迷宮 【問題描述】

給定乙個n*m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和

終點座標,問: 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮

中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。

輸入樣例 輸出樣例

【資料規模】

1≤n,m≤5

輸入輸出格式

輸入格式:

【輸入】

第一行n、m和t,n為行,m為列,t為障礙總數。第二行起點座標sx,sy,終點

座標fx,fy。接下來t行,每行為障礙點的座標。

輸出格式:

【輸出】

給定起點座標和終點座標,問每個方格最多經過1次,從起點座標到終點座標的方

案總數。

首先判斷下一步是否可以走,可以走則進行遞迴,並標記已選(即標記下一步),遞迴結束後還原標記。這個思路有坑的地方在於開始位置已經選擇不可以再次遞迴,但是一開始容易忽略。其次,棋盤的定義也是花了我不少時間,因為輸入n*m是行和列,所以行最小是1,陣列的最大值應為n+1,對應的m也一樣

#include

#include

using namespace std;

int row1, row2, barrier;

int startx, starty, endx, endy;

int area[6]

[6]=

;int ans =0;

void

dfs(

int x = startx,

int y = starty)

//往上走

if(y < row2 && area[x]

[y +1]

!=1)//往下走

if(y >

1&& area[x]

[y -1]

!=1)//往右走

if(x < row1&& area[x+1]

[y]!=1)

//往左走

if(x >

1&& area[x-1]

[y]!=1)

}int

main()

area[startx]

[starty]=1

;dfs()

;printf

("%d"

, ans)

;return0;

}

1 在四個方向上遞迴如果簡單寫的話,可以利用int xs[4] = ;的方式。可有可無

2 下面這種解法從當前位置開始標記,結束條件是陣列越界(索引大於行數和列數)或者訪問到結束的結點

#include

#include

using namespace std;

int row1, row2, barrier;

int startx, starty, endx, endy;

int area[6]

[6]=

;int ans =0;

int xs[4]

=;int ys[4]

=;void

dfs(

int x = startx,

int y = starty)

area[x]

[y]=1;

for(

int i =

0; i <4;

++i)

} area[x]

[y]=0;

}int

main()

dfs();

printf

("%d"

, ans)

;return0;

}

搜尋 P1605 迷宮

迷宮 問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 輸入輸出格...

P1605 迷宮 深度優先搜尋關卡

迷宮 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 輸入格式 輸入 第一...

洛谷 P1605 迷宮

問題描述 給定乙個n m方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和 終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮 中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入樣例 輸出樣例 資料規模 1 n,m 5 題目描述 輸入輸...