poj 1915 KnightMoves(bfs)
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 24094 | Accepted: 11364 |
Description
Mr Somurolov, fabulous chess-gamer indeed, asserts that no one else but him can move knights from one position to another so fast. Can you beat him?
The Problem
Your task is to write a program to calculate the minimum number of moves needed for a knight to reach one point from another, so that you have the chance to be faster than Somurolov.
For people not familiar with chess, the possible knight moves are shown in Figure 1.
Input
Next follow n scenarios. Each scenario consists of three lines containing integer numbers. The first line specifies the length l of a side of the chess board (4 <= l <= 300). The entire board has size l * l. The second and third line contain pair of integers {0, ..., l-1}*{0, ..., l-1} specifying the starting and ending position of the knight on the board. The integers are separated by a single blank. You can assume that the positions are valid positions on the chess board of that scenario.
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;
}
}
poj 1915 KnightMoves(bfs)的更多相关文章
- POJ 1915 Knight Moves
POJ 1915 Knight Moves Knight Moves Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 29 ...
- POJ 1915 Knight Moves(BFS+STL)
Knight Moves Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 20913 Accepted: 9702 ...
- POJ 1915 经典马步 双向bfs
拿这个经典题目开刀...........可是双向时间优势在这题上的效果不太明显 #include <iostream> #include <algorithm> #includ ...
- POJ 3026(BFS+prim)
http://poj.org/problem?id=3026 题意:任意两个字母可以连线,求把所有字母串联起来和最小. 很明显这就是一个最小生成树,不过这个题有毒.他的输入有问题.在输入m和N后面,可 ...
- OpenJudge/Poj 1915 Knight Moves
1.链接地址: http://bailian.openjudge.cn/practice/1915 http://poj.org/problem?id=1915 2.题目: 总Time Limit: ...
- hdu 1043 pku poj 1077 Eight (BFS + 康拓展开)
http://acm.hdu.edu.cn/showproblem.php?pid=1043 http://poj.org/problem?id=1077 Eight Time Limit: 1000 ...
- POJ 3414 Pots bfs打印方案
题目: http://poj.org/problem?id=3414 很好玩的一个题.关键是又16ms 1A了,没有debug的日子才是好日子.. #include <stdio.h> # ...
- [POJ] 1606 Jugs(BFS+路径输出)
题目地址:http://poj.org/problem?id=1606 广度优先搜索的经典问题,倒水问题.算法不需要多说,直接BFS,路径输出采用递归.最后注意是Special Judge #incl ...
- POJ:2049Finding Nemo(bfs+优先队列)
http://poj.org/problem?id=2049 Description Nemo is a naughty boy. One day he went into the deep sea ...
随机推荐
- 查询Oracle表空间使用情况
,),'990.99')||'%' "使用比(%)",F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最大块(M)" ...
- CentOS 6.5 安装OSA监控精灵监控主机
OSA监控是一个开源的图形化免费好用的监控,安装之前首先要配置好PHP环境, yum install httpd mysql mysql-server php-mysql php* -y 编辑http ...
- 百度地图api根据地址获取经纬度
package com.haiyisoft.cAssistant;import java.io.BufferedReader;import java.io.IOException; import ja ...
- 小程序的autocomplete
1.别做单个组件的autocomplete了,很坑,牵扯的坑太多,最后碰到原生组件canvas会让人欲哭无泪 2.单个组件的路走不通,走新页面吧,点击input框,进入到下个页面,搜所后选择,点击完成 ...
- python开发问题
1. pip3 ''' pip3 install --upgrade pip sudo apt-get install python3-setuptools pip3 install --upgrad ...
- python 实验2 分支结构
该博客专为我的小伙伴们提供参考而附加,没空加上代码具体解析,望各位谅解 实验一 货币转换 写一个程序进行人民币和欧元间币值转换,其中: ...
- zabbix报警后不会自动消除解决
http://www.cnblogs.com/zhongkai-27/p/9984597.html
- tmux 学习
这几天学习了一下 tmux的使用 tmux 可以同时打开多个窗口 关于使用技巧 复制文章一下 哈哈 感谢网友 ================================华丽的分割线====== ...
- 1 Java基础知识
1)面向对象的特性有哪些? 答:封装.继承和多态. 2)Java 中覆盖(Override)和重载(Overload)是什么意思? 答:覆盖是指子类对父类方法的一种重写,只能比父类抛出更少的异常,访问 ...
- 爬虫七之分析Ajax请求并爬取今日头条
爬取今日头条图片 这里只讨论出现的一些问题,代码在最下面github链接里. 首先,今日头条取消了"图集"这一选项,因此对于爬虫来说效率降低了很多: 在所有代码都完成后,也许是爬取 ...