程式設計訓練 輸出迷宮所有解(不是迷宮最短路)

2021-10-03 17:50:58 字數 2310 閱讀 6514

之前寫過乙個用bfs解決迷宮最短路的問題,這篇文章則是另外乙個問題,那就是輸出迷宮的所有可能路徑。直接看樣例輸入輸出就明白題意了:

樣例輸入1

3

s..*.*

..e

3代表迷宮是3 ×

\times

× 3的,s代表起點,e代表終點,.代表路,'*'代表牆壁。

樣例輸出1

(0,1)(1,1)(2,1)(2,2)
顯然這個迷宮只有一條路徑,上述輸出了從起點的下一步開始的所有點座標。

樣例輸入2

3

s..*..

..e

樣例輸出2
(0,1)(0,2)(1,2)(2,2)

(0,1)(0,2)(1,2)(1,1)(2,1)(2,2)

(0,1)(1,1)(1,2)(2,2)

(0,1)(1,1)(2,1)(2,2)

這個迷宮問題有4個解。

資料規定

規定輸入位置座標一定是(0,0),迷宮是正方形,且最大規模不超過100 ×

\times

× 100.

(想讓迷宮是長方形也可以,給下面的程式加乙個長度或者寬度的變數就行了)

核心演算法用偽**表示:

// 從當前點(x,y)開始尋找終點

findpath

(int x,

int y)

else

} 取消(x,y)訪問標記;

}

所用資料結構及輔助功能的構造不贅述,詳見參考**。

#

include

#define

maxn

105int flag[maxn]

[maxn]

;// 訪問標記

char map[maxn]

[maxn]

;// 地圖

int dx[4]

=;int dy[4]

=;// 儲存路徑的座標,如果用c++,可以用pair代替

int path_x[maxn*maxn]

;// 儲存路徑的橫座標

int path_y[maxn*maxn]

;// 儲存路徑的縱座標

int length;

// 除了終點外的路徑點數

int n;

// 地圖的規模

void

findpath

(int x,

int y)

printf

("\n");

}else}}

flag[x]

[y]=0;

}int

main()

getchar()

;}findpath(0

,0);

}return0;

}

拓展一道題:騎士遊歷問題,輸入棋盤規模,輸入騎士的初始座標,騎士只能走「日」字形,求乙個能不重複走完所有格仔的路徑。

也是使用迷宮問題的演算法思想,但是這個演算法用在騎士遊歷問題上,複雜度相當高,執行程式時肉眼可見的慢。網上還有結合貪心法的解法,那個應該是求解騎士遊歷問題的合理解法,這裡我僅僅為迷宮問題作拓展鞏固。

// 這個演算法複雜度太高了,是指數級別的,執行速度肉眼可見的慢

// 網上還有一種方法是結合了貪心法的思想,如果以後有興趣可以看(可以去參考

#include

#define

maxn

105int flag[maxn]

[maxn]

;int end =0;

// 標記程式是否結束

int count =0;

// 武士棋已走步數

int n;

// 棋盤規模

int path_x[maxn+1]

, path_y[maxn+1]

;int start_x, start_y;

// 起點座標

int dx[8]

=;int dy[8]

=;void

findpath

(int x,

int y)

printf

("\n");

}else

count--;}

}}flag[x]

[y]=0;

}int

main()

return0;

}

棧 求迷宮所有解

maze.cpp 定義控制台應用程式的入口點。include stdafx.h include define stack init size 100 define stack add size 10 define row number 3 define col number 3 typedef st...

用遞迴函式求出迷宮所有解

牆元素值為0,可通過路徑為 1,通過路徑為足跡。輸入格式為x,y,中間有逗號。依次試探東南西北四個方向 include using namespace std struct postype 迷宮座標位置型別 define maxlength 25 設迷宮的最大行列為25 typedef int ma...

用棧解決迷宮問題(輸出所有路徑和最短路徑)

include includeusing namespace std define m 4 行數 define n 4 列數 define maxsize 100 棧最多元素個數 int mg m 2 n 2 struct migong stack maxsize path maxsize 定義棧和...