1.链接地址:

http://bailian.openjudge.cn/practice/1915

http://poj.org/problem?id=1915

2.题目:

总Time Limit:
1000ms
Memory Limit:
65536kB
Description
Background
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
The input begins with the number n of scenarios on a single line by itself.
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
For each scenario of the input you have to calculate the minimal
amount of knight moves which are necessary to move from the starting
point to the ending point. If starting point and ending point are
equal,distance is zero. The distance must be written on a single line.
Sample Input
3
8
0 0
7 0
100
0 0
30 50
10
1 1
1 1
Sample Output
5
28
0
Source
TUD Programming Contest 2001, Darmstadt, Germany

3.思路:

4.代码:

 #include<stdio.h>
#include<iostream>
#include<queue>
using namespace std;
typedef struct
{
int row;
int col;
//int step;
}data;
int a[][];
int colStep[]={,,-,-,,,-,-};
int rowStep[]={,,-,-,-,-,,};
bool in(int row,int col,int size)
{
if(row<||row>=size) return false;
if(col<||col>=size) return false;
return true;
}
void initArray(int size)
{
int i,j;
for(i=;i<size;i++)
{
for(j=;j<size;j++)
{
a[i][j]=-;
}
}
}
int f(int i,int j,int m,int n,int size)
{
queue<data> q;
int k;
int newRow,newCol;
data start,aData;
start.row=i;
start.col=j;
initArray(size);
//start.step=1;
a[i][j]=;
q.push(start);
while(!q.empty())
{
aData=q.front();
if(aData.row==m&&aData.col==n)
{
return a[aData.row][aData.col];
}
else
{
for(k=;k<;k++)
{
newRow=aData.row+rowStep[k];
newCol=aData.col+colStep[k];
if(in(newRow,newCol,size))
{
if(a[newRow][newCol]==-)
{
data newData;
newData.col=newCol;
newData.row=newRow;
a[newRow][newCol]=a[aData.row][aData.col]+;
q.push(newData);
}
}
}
}
q.pop();
}
return ;
}
int main()
{
int sum,k;
int i,j,m,n,size;
cin>>sum;
for(k=;k<sum;k++)
{
cin>>size>>i>>j>>m>>n;
cout<<f(i,j,m,n,size)<<endl;
}
return ;
}

OpenJudge/Poj 1915 Knight Moves的更多相关文章

  1. POJ 1915 Knight Moves

    POJ 1915 Knight Moves Knight Moves   Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 29 ...

  2. POJ 1915 Knight Moves(BFS+STL)

     Knight Moves Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 20913   Accepted: 9702 ...

  3. POJ 2243 Knight Moves(BFS)

    POJ 2243 Knight Moves A friend of you is doing research on the Traveling Knight Problem (TKP) where ...

  4. POJ 2243 Knight Moves

    Knight Moves Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13222   Accepted: 7418 Des ...

  5. 【POJ 2243】Knight Moves

    题 Description A friend of you is doing research on the Traveling Knight Problem (TKP) where you are ...

  6. POJ Knight Moves 2243 x

    Knight Moves Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13974   Accepted: 7797 Des ...

  7. POJ---2243 Knight Moves 使用A*算法的广度优先搜索

    题目链接:http://poj.org/problem?id=2243 启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省 ...

  8. 917:Knight Moves

    题目链接:http://noi.openjudge.cn/ch0205/917/ 原题应该是hdu 1372 总时间限制: 1000ms  内存限制: 65536kB 描述 BackgroundMr ...

  9. poj2243 Knight Moves(BFS)

    题目链接 http://poj.org/problem?id=2243 题意 输入8*8国际象棋棋盘上的两颗棋子(a~h表示列,1~8表示行),求马从一颗棋子跳到另一颗棋子需要的最短路径. 思路 使用 ...

随机推荐

  1. mysql事物

    一. 什么是事务 事务就是一段sql 语句的批处理,但是这个批处理是一个atom(原子) ,不可分割,要么都执行,要么回滚(rollback)都不执行. 二.为什么出现这种技术 为什么要使用事务这个技 ...

  2. webViewDidFinishLoad因为网页里的重定向,会调用多次,使用web view.isLoading来解决

    我编码如下,但我发现 webViewDidFinishLoad() 会发生若干次. 如何知道 webViewDidFinishLoad() 最后发生吗? iNavigate = ; - (void)w ...

  3. PS自定义对象二_PSCustomObject

    创建自定义对象 $obj = [pscustomobject]@{a=1;b="";c=$null} % 选择属性列 $obj | gm |  % definition ( $ob ...

  4. C++ 构造和析构

    1.继承关系可认为,子类在父类的基础上进行.从这个角度讲,可把它认为穿衣脱衣的过程.穿衣是:先穿内衣,再穿外套.脱衣是:先脱外套,在脱内衣.构造是:先调用父类构造方法,再调用子类构造方法.析构是:先调 ...

  5. 多线程编程(一) - 关于C#中Thread.Join()

    Thread.Join()在MSDN中的解释很模糊:Blocks the calling thread until a thread terminates 有两个主要问题:1.什么是the calli ...

  6. BZOJ 1878: [SDOI2009]HH的项链 离线树状数组

    1878: [SDOI2009]HH的项链 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  7. 提高你的Java代码质量吧:如果有必要,使用变长数组吧

    一.分析  Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用中非常不方便. 二.场景  比如要对班级学生的信息进行统计,因为我们不知道一个班级会有多少学生(随时都有可能会有学生 ...

  8. android4.4短信新概念

    android4.4对短信引入了一个全新的概念:默认短信应用.即android用户可以在系统设置里面选择一个默认的短信应用,只有这个应用才能进行手机的基本短信操作.按照google自己的解释这样做的原 ...

  9. unity3d NGUI多场景共用界面制作

    1创建单独编辑UI的unity场景 UIScene.unity 用来做UI面界 ,创建Resources文件存放UI界面的prefab,代码里动态load资源仅仅能从Resources目录载入 2创建 ...

  10. 【Android动画】之Tween动画 (渐变、缩放、位移、旋转)

    Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与g ...