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 ...
随机推荐
- LeetCode 15. 三数之和(3Sum)
题目描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复 ...
- 有关ajax中的URL问题
url : ../../Service/MSD_Maintain.ashx/?action=Add4T2 url : Handler/MaintainHandler.ashx/?action= ...
- vue问题四:富文本编辑器上传图片
vue使用富文本编辑器上传图片: 我是用的是wangEditor 富文本编辑器 demo:http://www.wangeditor.com/ 1).安装依赖:npm install wangedit ...
- leetcode 34在排序数组中查找元素的第一个和最后一个位置
class Solution { public: vector<int> searchRange(vector<int>& nums, int target) { ve ...
- Jenkins+Harbor+Docker发布
使用Jenkins发布Docke 需要准备的,docker,jenkins,Harbor docker安装 安装依赖: # yum install -y yum-utils device-mapper ...
- C#规范整理·语言要素
如有不理解,请留言,开始! 1. 正确操作字符串 拼接字符串一定要考虑使用 StringBuilder ,默认长度为16,实际看情况设置. StringBuilder本质: 是以非托管方式分配内存. ...
- apache域名跳转
状态码:*301: 永久重定向,域名跳转一定要用301,对搜索引擎友好的. 302:临时重定向在虚拟主机配置文件/usr/local/apache2/conf/extra/httpd-vhosts & ...
- 阶段3 2.Spring_02.程序间耦合_5 编写工厂类和配置文件
先把dao的实现复制一份到别的地方.然后删除项目里面的AccountDaoImpl这个dao的实现类 删除 service层就开始报错了 这个时候运行直接报错 把文件复制回来就不报错了 解决依赖关系 ...
- JS BOM(浏览器对象)
BOM即浏览器对象模型,它包括如下一些对象! (一)screen对象,Screen 对象中存放着有关显示浏览器屏幕的信息. 常见的属性有: availHeight:返回显示屏幕的高度 availWid ...
- TypeError: reduction operation 'argmax' not allowed for this dtype
这个错误真的tmd伤脑筋.我用idxmax函数去求series类型的最大值的索引,结果明明是下面这种数据, 无论我如何pint他的shape,type,他怎么看都是一个满足idxmax函数要求的参数类 ...