标签:
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 24094 | Accepted: 11364 |
Description
Input
Output
Sample Input
3 8 0 0 7 0 100 0 0 30 50 10 1 1 1 1
Sample Output
5 28 0
分析:简单BFS,分8个方向遍历。
Java AC 代码
import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static int chessLength; static int dx[] = {-2, -2, -1, -1, 1, 1, 2, 2}; static int dy[] = {1, -1, 2, -2, 2, -2, 1, -1}; static Point original, goal; static Queue<Point> queue; static boolean marked[][]; static int steps[][]; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int testNumber = sc.nextInt(); for(int i = 1; i <= testNumber; i++) { chessLength = sc.nextInt(); original = new Point(sc.nextInt(), sc.nextInt()); goal = new Point(sc.nextInt(), sc.nextInt()); marked = new boolean[chessLength][chessLength]; steps = new int[chessLength][chessLength]; queue = new LinkedList<Point> (); bfs(); System.out.println(steps[goal.row][goal.col]); } } public static void bfs() { queue.add(original); marked[original.row][original.col] = true; steps[original.row][original.col] = 0; while(!queue.isEmpty()) { Point head = queue.poll(); for(int i = 0; i < 8; i++) { int _row = head.row + dy[i]; int _col = head.col + dx[i]; if(_row >= 0 && _row < chessLength && _col >= 0 && _col < chessLength && !marked[_row][_col]) { queue.add(new Point(_row, _col)); marked[_row][_col] = true; steps[_row][_col] = steps[head.row][head.col] + 1; } } if(marked[goal.row][goal.col]) return; } } } class Point { int row; int col; public Point(int row, int col) { this.row = row; this.col = col; } }
标签:
原文地址:http://www.cnblogs.com/kkkkkk/p/5539750.html