链接:https://ac.nowcoder.com/acm/contest/301/G
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
小乐乐觉得学习太简单了,剩下那么多的时间好无聊,于是便想打游戏。
最近新出了一个特别火的游戏,叫吃猪,小乐乐准备玩一玩。
吃猪游戏很简单,给定一个地图,大小为n*m,在地图中会随机出现一个火山口,只要小乐乐能逃离这个地图,他便能吃猪!
但吃鸡远没有那么简单:
1.小乐乐每走一次只能上下左右四个方向中走一步。
2.小乐乐每走一步,火山喷发的岩浆就会向四周蔓延一个格子,所有岩浆走过的地方都视为被岩浆覆盖。
3.小乐乐碰到岩浆就会死。
4.地图中还有很多障碍,使得小乐乐不能到达,但是岩浆却可以把障碍融化。
5.小乐乐只有走到题目给定的终点才算游戏胜利,才能吃猪。
小乐乐哪见过这场面,当场就蒙了,就想请帮帮他,告诉他是否能吃猪。
输入描述:
多组样例输入
第一行给定n,m,(1 <= n, m <= 1000)代表地图的大小。
接下来n行,每一行m个字符,代表地图,对于每一个字符,如果是'.',代表是平地,'S'代表小乐乐起始的位置,
'E'代表终点,'#'代表障碍物,'F'代表火山口。
输出描述:
输出只有一行。如果小乐乐能吃猪,输出"PIG PIG PIG!"。否则输出"A! WO SI LA!"。
示例1
输入
复制
3 3
F..
#S#
#.E
输出
复制
PIG PIG PIG!
bfs 只要把火山蔓延的距离条件加入的判断条件里就ok
java写了一发
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class node
{
int x,y,step;
public node(int x, int y, int step) {
super();
this.x = x;
this.y = y;
this.step = step;
}
}
public class Main {
static int n,m,sx,sy,ex,ey,fx,fy;
static String[] map =new String[1005];
static int [] dx={1,0,-1,0};
static int [] dy={0,1,0,-1};
static long bfs() {
int [][] d=new int[n+5][m+5];
for(int i=0;i<=n+4;i++)
for(int j=0;j<=m+4;j++)
{
d[i][j]=1000000000;
}
Queue<node> q=new LinkedList<node>();
node a=new node(sx,sy,0);
q.offer(a);
d[sx][sy]=0;
while(q.size()!=0)
{
a=q.poll();
if(map[a.x].charAt(a.y)=='E')
{
break;
}
for(int i=0;i<4;i++)
{
node b=new node(a.x+dx[i],a.y+dy[i],0);
if(b.x>=0&&b.x<n&&b.y>=0&&b.y<m&&map[b.x].charAt(b.y)!='#'&&d[b.x][b.y]==1000000000&&(Math.abs(fy-b.y)>=d[a.x][a.y]||Math.abs(fx-b.x)>=d[a.x][a.y]))
{
d[b.x][b.y]=d[a.x][a.y]+1;
q.offer(b);
}
}
}
return d[ex][ey];
}
public static void main(String args[])throws IOException {
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
n=in.nextInt();
m=in.nextInt();
for(int i=0;i<n;i++)
{
map[i]=new String();
map[i]=in.next();
for(int j=0;j<m;j++)
{
if(map[i].charAt(j)=='S')
{
sx=i;
sy=j;
}
if(map[i].charAt(j)=='E')
{
ex=i;
ey=j;
}
if(map[i].charAt(j)=='F')
{
fx=i;
fy=j;
}
}
}
if(bfs()!=1000000000)
System.out.println("PIG PIG PIG!");
else
System.out.println("A! WO SI LA!");
}
}
}