
0 点赞 评论 收藏
分享
2016-08-02 22:09
西安电子科大 Java 明经:import java.util.Queue;
import java.util.Scanner;
import java.util.concurrent.LinkedBlockingQueue;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Queue<Integer> yqueue=new
LinkedBlockingQueue<>();
Queue<Integer> xqueue=new
LinkedBlockingQueue<>();
while (in.hasNext()) {
int n=in.nextInt();
int m=in.nextInt();
char[][] cs=new char[55][55];
bu[] bu=new bu[55];
in.nextLine();
for(int i=0;i<n;i++)
{
cs[i]=in.nextLine().toCharArray();
}
int x0=in.nextInt();
int y0=in.nextInt();
cs[x0][y0]='x';
int k=in.nextInt();
for(int i=0;i<k;i++)
{
int dx=in.nextInt();
int dy=in.nextInt();
bu[i]=new bu(dx, dy);
}
int[][] a=new int[55][55];
a[x0][y0]=0;
xqueue.add(x0);
yqueue.add(y0);
int x,y;
int max=-1;
while(!xqueue.isEmpty())
{
x=xqueue.poll();
y=yqueue.poll();
for(int i=0;i<k;i++)
{
// System.out.println(i);
if(x+bu[i].getDx()>=0&&y+bu[i].getDy()>=0&&
x+bu[i].getDx()<n&&y+bu[i].getDy()<m&&
a[x][y]+1>a[x+bu[i].getDx()][y+bu[i].getDy()]&&
cs[x+bu[i].getDx()][y+bu[i].getDy()]=='.')
{
a[x+bu[i].getDx()][y+bu[i].getDy()]=a[x][y]+1;
cs[x+bu[i].getDx()][y+bu[i].getDy()]='x';
xqueue.add(x+bu[i].getDx());
yqueue.add(y+bu[i].getDy());
if(a[x][y]+1>max)
{
max=a[x][y]+1;
}
//
System.out.print(x+bu[i].getDx());
//
System.out.println(y+bu[i].getDy());
}
}
}
int y1=0;
for(int x1=0,x2=n-1;y1<m;y1++)
{
if(a[x1][y1]!=0||a[x2][y1]!=0)
{
break;
}
}
if(y1==m)
{
max=-1;
}
System.out.println(max);
}
}
static class bu{
private int dx;
private int dy;
bu(){}
bu(int dx,int dy)
{
this.dx=dx;
this.dy=dy;
}
public int getDx() {
return dx;
}
public int getDy() {
return dy;
}
public void setDx(int dx) {
this.dx = dx;
}
public void setDy(int dy) {
this.dy = dy;
}
}
}

0 点赞 评论 收藏
分享
创作者周榜
更多
关注他的用户也关注了: