69,373
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string>
#include <deque>
using namespace std;
struct Point
{
int x;
int y;
};
struct Node
{
char c;
int step;
Point pt;
bool foot;
};
Node path[21][21] = {0};
int d[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
int main()
{
int m,n,time;
int i,j,k;
while(EOF != scanf("%d %d %d",&n,&m,&time))
{
getchar();
if(m == 0&& n ==0 && time == 0)
break;
Point start,end;
for(i = 0;i<m;i++)
{
for(j = 0;j<n;j++)
{
scanf("%c",&path[i][j].c);
if(path[i][j].c == 'S')
{
path[i][j].pt.x = i;
path[i][j].pt.y = j;
start.x = i;
start.y = j;
}
else if(path[i][j].c == 'P')
{
path[i][j].pt.x = i;
path[i][j].pt.y = j;
end.x = i;
end.y = j;
}
else
{
path[i][j].pt.x = i;
path[i][j].pt.y = j;
}
}
getchar();
}
deque<Node> q;
q.push_back(path[start.x][start.y]);
path[start.x][start.y].foot = true;
while(!q.empty())
{
Node temp = q.front();
if(temp.pt.x == end.x && temp.pt.y == end.y)
{
if(temp.step <= time)
printf("YES\n");
else
printf("NO\n");
break;
}
q.pop_front();
for(i = 0;i<4;i++)
{
if(temp.pt.x+d[i][0] >=0 && temp.pt.x+d[i][0] < m &&
temp.pt.y+d[i][1] >=0 && temp.pt.y+d[i][1] < n &&
path[temp.pt.x+d[i][0]][temp.pt.y+d[i][1]].c != '*'&&
!path[temp.pt.x+d[i][0]][temp.pt.y+d[i][1]].foot)
{
path[temp.pt.x+d[i][0]][temp.pt.y+d[i][1]].step = temp.step+1;
q.push_back(path[temp.pt.x+d[i][0]][temp.pt.y+d[i][1]]);
path[temp.pt.x+d[i][0]][temp.pt.y+d[i][1]].foot = true;
}
}
}
memset(path,0,sizeof(path));
if(q.empty())
printf("NO\n");
}
return 0;
}