Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
java写的 不知道哪里错了对搜索的位置进行了放缩 import java.util.LinkedList; import java.util.Scanner; public class Main { static int l; static int maxi; static int maxj; static int mini; static int minj; static int ei; static int ej; static boolean[][] vis; public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(); while (n-- > 0) { l = s.nextInt(); int si = s.nextInt(); int sj = s.nextInt(); ei = s.nextInt(); ej = s.nextInt(); maxi = Integer.MAX_VALUE; maxj = Integer.MAX_VALUE; mini = Integer.MIN_VALUE; minj = Integer.MIN_VALUE; vis = new boolean[l][l]; int step = bfs(si, sj); System.out.println(step); } } static class Point { int i; int j; int step; Point(int i, int j) { this.i = i; this.j = j; } Point(int i, int j, int step) { this.i = i; this.j = j; this.step = step; } } static int bfs(int si, int sj) { LinkedList<Point> pnt = new LinkedList<Point>(); visit(si, sj, vis, pnt, -1); while (true) { Point p = pnt.poll(); if (p == null) return 0; if (p.i == ei && p.j == ej) return p.step; int i, j; i = p.i - 2; j = p.j - 1; if (check(i, j) && notvisit(i, j, vis)) visit(i, j, vis, pnt, p.step); i = p.i - 2; j = p.j + 1; if (check(i, j) && notvisit(i, j, vis)) visit(i, j, vis, pnt, p.step); i = p.i - 1; j = p.j - 2; if (check(i, j) && notvisit(i, j, vis)) visit(i, j, vis, pnt, p.step); i = p.i - 1; j = p.j + 2; if (check(i, j) && notvisit(i, j, vis)) visit(i, j, vis, pnt, p.step); i = p.i + 1; j = p.j - 2; if (check(i, j) && notvisit(i, j, vis)) visit(i, j, vis, pnt, p.step); i = p.i + 1; j = p.j + 2; if (check(i, j) && notvisit(i, j, vis)) visit(i, j, vis, pnt, p.step); i = p.i + 2; j = p.j - 1; if (check(i, j) && notvisit(i, j, vis)) visit(i, j, vis, pnt, p.step); i = p.i + 2; j = p.j + 1; if (check(i, j) && notvisit(i, j, vis)) visit(i, j, vis, pnt, p.step); pnt = tidy(pnt); } } static boolean check(int i, int j) { if (i >= l || i < 0 || j >= l || j < 0 || i > maxi || i < mini || j > maxj || j < minj) return false; else return true; } static void visit(int i, int j, boolean[][] vis, LinkedList<Point> pnt, int laststep) { vis[i][j] = true; Point p = new Point(i, j, laststep + 1); pnt.addLast(p); setminmax(i, j); } static boolean notvisit(int i, int j, boolean[][] vis) { return !vis[i][j]; } static void setminmax(int i0, int j0) { mini = Math.max(Math.min(i0, ei) - 3, mini); minj = Math.max(Math.min(j0, ej) - 3, minj); maxi = Math.min(Math.max(i0, ei) + 3, maxi); maxj = Math.min(Math.max(j0, ej) + 3, maxj); } static LinkedList<Point> tidy(LinkedList<Point> pnt) { LinkedList<Point> newpnt = new LinkedList<Point>(); for (Point p : pnt) { if (check(p.i, p.j)) newpnt.addLast(p); } return newpnt; } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator