Grasshop.java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class Grasshop {
/**
* @param args
*/
int m, n, gm, gn, gv, tm, tn;
LinkedList<Integer> mq = new LinkedList<Integer>();
LinkedList<Integer> nq = new LinkedList<Integer>();
LinkedList<Integer> vq = new LinkedList<Integer>();
while (true)
{
s = br.readLine();
if (s == null || s.length()==0) break;
int[][] pole = new int[m][n];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
vq.clear();
mq.clear();
nq.clear();
vq.addLast(0);
mq.addLast(gm);
nq.addLast(gn);
boolean done = false;
while (!vq.isEmpty())
{
gv = vq.removeFirst();
gm = mq.removeFirst();
gn = nq.removeFirst();
if (gm == tm && gn == tn)
{
done = true;
break;
}
if (gm >= 0 && gn >= 0 &&
gm < m && gn < n &&
pole[gm][gn] > gv)
{
pole[gm][gn] = gv;
vq.addLast(gv + 1);
mq.addLast(gm + 2);
nq.addLast(gn + 1);
vq.addLast(gv + 1);
mq.addLast(gm + 1);
nq.addLast(gn + 2);
vq.addLast(gv + 1);
mq.addLast(gm - 2);
nq.addLast(gn - 1);
vq.addLast(gv + 1);
mq.addLast(gm - 1);
nq.addLast(gn - 2);
vq.addLast(gv + 1);
mq.addLast(gm - 2);
nq.addLast(gn + 1);
vq.addLast(gv + 1);
mq.addLast(gm - 1);
nq.addLast(gn + 2);
vq.addLast(gv + 1);
mq.addLast(gm + 2);
nq.addLast(gn - 1);
vq.addLast(gv + 1);
mq.addLast(gm + 1);
nq.addLast(gn - 2);
}
}
if (!done
) System.
out.
println("impossible"); }
}
}