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. PHP PDO函数库具体解释

    文章来源:PHP开发学习门户 地址:http://www.phpthinking.com/archives/565 PDO是一个"数据库訪问抽象层",作用是统一各种数据库的訪问接口 ...

  2. Android 导入导出CSV,xls文件 .

    1 . http://www.bangchui.org/read.php?tid=62 2 .http://blog.csdn.net/xinzheng_wang/article/details/77 ...

  3. check_area

    CCTouch* pTouch = ...; CCSprite* pSprite = ...; CCRect rect = pSprite ->boundingBox(); if ((& ...

  4. c++ 拷贝构造练习

    #include<iostream> using namespace std; class Vector { private: int *dwp; int size; void clone ...

  5. centos中安装jdk方法

    RPM安装方法一: 1.检验系统原版本[root@zck ~]# java -versionjava version "1.6.0_24"OpenJDK Runtime Envir ...

  6. tcl/tk

    http://blog.csdn.net/dulixin/article/category/365058 http://blog.csdn.net/dulixin/article/category/3 ...

  7. Ajax学习笔记(1)

    Ajax全称为Asynchronous Javascript and XML.一般用于页面数据交互响应,最大的好处是响应时无需刷新页面. Ajax的优点: 1.不需要插件的支持.用户只需允许javas ...

  8. h2database源码浅析:事务、两阶段提交

    Transaction Isolation Transaction isolation is provided for all data manipulation language (DML) sta ...

  9. 议:如何将树形菜单形式的数据转化成HTML的二维表(相同内容需合并单元格)

    一般做OA类管理系统,经常涉及到“组织架构”的概念,那么像这种有上下层级关系的数据一般会做成树形菜单的方式显示,底层代码必定会用到递归算法.这篇随笔的目的就是要谈谈除了用树形菜单来显示这种上下层级关系 ...

  10. 认识JSON

    JSON 全称 JavaScript Object Notation,意思是JavaScript对象表示法.是一种基于文本的.独立于语言的轻量级数据交换格式.易于阅读和编写,易于机器解析和生成. 一. ...