問題要求:
請輸入迷宮的行列數: 5 5
請輸入迷宮路徑節點資訊(1表示不能走,0表示能走)
0 0 1 0 1
0 0 1 0 0
1 0 0 1 0
0 1 0 0 0
開始尋找迷宮路徑(從左上角到右下角的乙個可通行的路徑):
迷宮不存在可通行的路徑
const
int way_cnt =4;
// 總的方向數目
const
int way_right =0;
const
int way_down =1;
const
int way_left =2;
const
int way_up =
3;const
int way_state_ok =5;
// 路徑方向可以行走
const
int way_state_err =6;
// 路徑方向不能行走
class
mazenode
// 迷宮節點型別
void
setx
(int x)
void
sety
(int y)
void
setwaystate
(int way,
int val)
//設定方向的狀態
intgetval()
intgetx()
intgety()
int*
getstate()
private
:int _val;
int _x;
int _y;
int _state[way_cnt];}
;
class
cseqtack
// 棧型別
bool isfull()
void
push
(const mazenode &data)
delete [
]_stack;
_stack=ptmp;
_size*=2;
} _stack[_top++
]=data;
} bool isempty()
mazenode top()
void
pop(
)--_top;
}~cseqtack (
)private
: mazenode *_stack;
int _top;
int _size;
cseqtack (
const cseqtack&);
};
class
maze
// 迷宮型別}~
maze()
void
initmazenode
(int x,
int y,
int data)
//初始化結點
}void
adjustmazenode()
//調整路徑
if(i ==0)
if(j ==0)
if(i ==_row -1)
if(j == _col -1)
if( j < _col -
1&&_pmazes[i]
[j +1]
.getval()
==1)if
(i < _row -
1&& _pmazes[i +1]
[j].
getval()
==1)if
(j >
0&& _pmazes[i]
[j -1]
.getval()
==1)if
(i >
0&&_pmazes[i -1]
[j].
getval()
==1)}
}}void
findmazepath()
//找路
_stack.push (_pmazes[0]
[0])
;while
(!_stack.isempty ())
if(node.getstate (
)[way_right ]
==way_state_ok )
//看右邊是否可走
if(node.
getstate()
[way_down ]
==way_state_ok )
//看下邊是否可走
if(node.getstate (
)[way_up ]
==way_state_ok )
//看上邊是否可走
if(node.
getstate()
[way_left ]
==way_state_ok )
//看左邊是否可走
_stack.pop ();
}}void
showmazepath()
while
(!_stack.
isempty()
) cout << endl;
for(
int i =
0; i < _row;
++i)
else
} cout << endl;}}
private
:int _row;
int _col;
mazenode *
*_pmazes;
cseqtack _stack;
};
int
main()
cout<
} maze.
adjustmazenode()
;// 調整迷宮節點方向的行走狀態
maze.
findmazepath()
;// 開始尋找迷宮路徑
maze.
showmazepath()
;// 列印迷宮尋找的結果
迷宮路徑演算法實現
include include include include define stack init size 1000 define stackincrement 10 define ok 1 define overflow 0 define error 0 typedef int selemtyp...
用棧實現走迷宮
假設迷宮從出發點到終點最多只有一條通路。include 2016 4 14 15 11 define max 100 struct path using std cin using std cout using std endl void findnext path s,int i,int j,in...
用棧實現迷宮s
迷宮問題是經典的一類問題,如何從給出的入口找到對應的出口,實現的方法和馬踏棋盤問題相似也是通過找到周圍 8個方向座標的關係,然後依據深度優先搜尋方法和一定的條件找到下一步對應的出路。由於迷宮問題需要儲存具體的完成路徑,這與前面的問題存在一定的差別。採用棧能夠很好的解決這個問題,其中棧結構用來儲存具體...