【转】POJ-3984-迷宫问题:简单BFS
思路请点这里
如果一开始做这道题我应该不会马上想到用BFS做,我还在纠结如何判断路径最短,好在之前做过类似的不容易看出是BFS解的,做这道题时也就明白了广搜的结果就是最短路径
这大概就是 题做多了的缘故罢
#include<iostream> #include<cstring> using namespace std; struct Node { int x, y; int Par; }Que[25]; int Visited[5][5]; int DirX[4] = {1, -1, 0, 0}; int DirY[4] = { 0, 0, 1, -1 }; int Front=0, Rear=1; // 自定义队列的头尾指针 void Print( int Point ) { if( Point != -1 ) { Print( Que[Point].Par ); cout<<"("<<Que[Point].x<<", "<<Que[Point].y<<")"<<endl; } } void BFS( int x, int y ) { while( Front < Rear ) { if( Que[Front].x==4 && Que[Front].y==4 ) Print(Front); for( int i=0; i<4; i++ ) { int a = Que[Front].x + DirX[i]; int b = Que[Front].y + DirY[i]; if( a<0 || a>4 || b<0 || b>4 || Visited[a][b] ) continue; else//入队 { Visited[a][b]=1; Que[Rear].x = a; Que[Rear].y = b; Que[Rear].Par = Front; Rear++; } } Front++;// 出队 } } int main() { //memset( Visited, 0, sizeof(Visited) ); for( int i=0; i<5; i++ ) for( int j=0; j<5; j++ ) cin>>Visited[i][j]; Que[0].x=Que[0].y=0; Que[0].Par = -1; BFS(0, 0); return 0; }