【转】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;
}

浙公网安备 33010602011771号