自定義迷宮類以及相關結構體,直接上**,有空我會把佈線問題也更新一下
下面展示一些maze.h
。
// an highlighted block
#include
#include
#include
#include
using
namespace std;
class
maze
;void
ramdonint
(int=10
);void
showmaze()
const
;int
getsize()
const
;int
*operator
(int row)
;//雖然三五法則,但是這裡好像真的不需要拷貝構造和等號過載?
~maze()
;private
:int size;
int*
* maze;
bool isinit;};
struct position
;void
operator
=(position& p);}
;
下面展示一些maze.cpp
。
// an highlighted block
#include
"maze.h"
void maze::
ramdonint
(int size)
;for
(int i =
0; i <= size +
1; i++);
if(i ==
0|| i == size +1)
//第一行行為空
for(
int j =
1; j <= size; j++
)//第一列為空,最後一列為空}}
isinit =
true;}
else
else}}
} maze[1]
[1]=
0;maze[size]
[size]=0
;}void maze::
showmaze()
const
cout << endl;}}
maze::
~maze()
}delete
maze;
maze =
nullptr
;}
下面展示一些main.cpp
。
// an highlighted block
#include
"maze.h"
bool
findpath
(maze& m)
;void
main()
while(!
findpath
(m))
;system
("cls");
m.showmaze()
; m.
~maze()
;system
("pause");
}bool
findpath
(maze& m)
//深搜,,
,};//右下左上
stack
*path;
path =
new stack()
;int size = m.
getsize()
;for
(int i =
0; i <= size+
1; i++
) position here(1
,1);
m[1][
1]=2
;int option =0;
int maxoption =3;
while
(here.row != size || here.col != size)
option++;}
if(option <= maxoption)
else
else
m[here.row]
[here.col]=2
; m[next.row]
[next.col]=2
; here = next;}}
m[size]
[size]=2
;delete path;
delete
offset;
return
true
;}
執行結果
2為曾經走過的路徑
下面展示一些廣搜實現尋路
。
// an highlighted block
bool
findpath2
(maze& m)
//廣搜,,
,};//右下左上
queue
*path;
path =
new queue()
;int size = m.
getsize()
;for
(int i =
0; i <= size +
1; i++
) position here(1
,1);
m[1][
1]=2
; position nbr;
int numofnbrs =4;
//同一方格能到達的方格數
while
(true
) path-
>
push
(nbr);}
if(path-
>
empty()
) here = path-
>
front()
;//取下乙個位置,可能一次push進去了很多個位置,但是都是右下左上順序取
path-
>
pop();
}}//把所有跟出發點聯通的區域都標記好之後
//構造路徑,
int length = m[size]
[size]-2
; position *way =
new position[length]
;//從終點逆推
for(
int j = length -
1; j >=
0; j--
) here = nbr;
//更新位置
}delete path;
delete
way;
delete
offset;
return
true
;}
迷宮問題(廣搜與深搜)
定義乙個二維陣列 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。input 乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。output 左上角到右下角的最短路徑,格式如樣例所示。sa...
搜尋(深搜 廣搜)
我記得在遙遠的2017年,我會敲的搜尋也只有暴力列舉了。那個時候的我深搜剛會一丟丟,所以也只配切切水題,然而經常死迴圈re那是肯定的。如今的我因為在多次比賽中都死於搜尋,那就必須得認真磕一下了。其實是這樣的 我眼裡認為的暴力就真的只是暴力,暴力無非就兩種 列舉打表和模擬。然而在這麼多次比賽後,我總能...
迷宮問題 廣搜
定義乙個二維陣列 int maze 5 5 queue 26 int head 0,tail 0,a 5 5 book 5 5 void function int tail 引數是隊尾 else function queue tail f 如果隊尾的父節點不是0 就將該父節點作為新的隊尾繼續呼叫 這...