题意:判断是否可以从S点走到P点 能 输出YES 否则 输出 NO
广搜:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
int m,n;
struct xy
{
int x,y;
} q;
int fx[4][2]= {{-1,0},{0,-1},{1,0},{0,1}};
char fz[101][101];
int bfs()
{
queue<xy>p;
xy f,next;
p.push(q);
while(!p.empty())
{
f=p.front();
p.pop();
for(int i=0; i<4; i++)
{
next.x=f.x+fx[i][0];
next.y=f.y+fx[i][1];
if(next.x>=0&&next.x<m&&next.y>=0&&next.y<n&&fz[next.x][next.y]!='*')
{
if(fz[next.x][next.y]=='P')
return 1;
fz[next.x][next.y]='*';
p.push(next);
}
}
}
return -1;
}
int main()
{
while(cin>>n>>m)
{
if(m==0&&n==0)
break;
memset(fz,'*',sizeof(fz));
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
{
cin>>fz[i][j];
if(fz[i][j]=='S')
{
fz[i][j]='*';
q.x=i;
q.y=j;
}
}
int t=bfs();
if(t==1)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}