I've tried many days for this problem, my solution is using BFS, but keeps getting WA6, any hints?
Code: Select all
class ss
{
public int id;
public int depth;
public int prev;
public ss(int _id, int _d, int _p)
{
this.id = _id;
this.depth = _d;
this.prev = _p;
}
}
static boolean change(int p, int cur, int next)
{
if (p == -1)
{
return false;
}
return (up(p, cur) != up(cur, next));
}
static int search(int a, int b)
{
if (a == b)
{
return 0;
}
Queue q = new LinkedList<ss>();
q.add(new ss(a, 0, -1));
Arrays.fill(vis, false);
vis[a] = true;
while (q.size() > 0)
{
ss k = (ss)q.poll();
int x = k.id;
int prev = k.prev;
for (int i = 0; i < towns[x].size(); i ++)
{
int y = (int)towns[x].get(i);
if (y == b)
{
if (change(prev, x, y))
{
return k.depth + 1;
}
return k.depth;
}
if (!vis[y])
{
vis[y] = true;
if (x == a)
{
q.add(new ss(y, k.depth, x));
}
else
if ((change(prev, x, y)))
{
q.add(new ss(y, k.depth + 1, x));
}
else
{
q.add(new ss(y, k.depth, x));
}
}
}
}
return 0;
}