POJ 1915Knight Moves(BFS)
来源:互联网 发布:node.js express 编辑:程序博客网 时间:2024/06/04 19:59
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
380 07 01000 030 50101 11 1
Sample Output
5280
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
const int maxn=300+5;
bool visit[maxn][maxn];
int dir[8][2]={{2,1},{1,2},{-1,2},{-2,1},{2,-1},{1,-2},{-1,-2},{-2,-1}};
int length;//由于在bfs函数的定义中会用到,所以我们这里定义为全局变量
typedef struct
{
int x;
int y;
int d;
void init(int nx,int ny,int nd)
{x=nx;y=ny;d=nd;}
}node;
int main()
{
int bfs(node,node);
node source,target;
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&length);
scanf("%d%d",&source.x,&source.y);
scanf("%d%d",&target.x,&target.y);
printf("%d\n",bfs(source,target));
}
return 0;
}
int bfs(node source,node target)
{
queue<node>q;
source.d=0;
q.push(source);
memset(visit,0,sizeof(visit));
visit[source.x][source.y]=1;
if(source.x==target.x&&source.y==target.y)
{return 0;}
while(!q.empty())
{
node a=q.front();
q.pop();
int x=a.x;
int y=a.y;
for(int i=0;i<8;i++)
{
int nx=x+dir[i][0];
int ny=y+dir[i][1];
if(nx<0||nx>=length||ny<0||ny>=length)
{continue;}
if(visit[nx][ny])
{continue;}
if(target.x==nx&&target.y==ny)
{return a.d+1;}
visit[nx][ny]=1;
node c;
c.init(nx,ny,a.d+1);
q.push(c);
}
}
return -1;
}
- POJ 1915 Knight Moves bfs
- POJ 1915Knight Moves(BFS)
- poj 1915 Knight Moves(bfs)
- poj 1915 Knight Moves(bfs)
- POJ 1915 BFS-Knight Moves
- [BFS]poj 1915 Knight Moves
- Poj 1915 Knight Moves ( BFS
- POJ 1915 Knight Moves BFS
- 【BFS】poj 1915 Knight Moves
- POJ 1915 Knight Moves bfs || 双向bfs
- poj 1915 knight moves(bfs 简单)
- poj 1915 knight moves (双向bfs)
- POJ 1915 Knight Moves (BFS)
- poj 1915 Knight Moves(BFS遍历)
- Poj 1915 Knight Moves(BFS)
- POJ 1915 Knight Moves(双向BFS)
- POJ 1915 Knight Moves(DFS/BFS)
- POJ 1915 Knight Moves(BFS+STL)
- windows路径操作API函数
- 还是A+B
- Django Push 的一些资料
- HDU 2458 二分匹配求最大团
- 循环-03. 求符合给定条件的整数集(15)
- POJ 1915Knight Moves(BFS)
- 裸题
- makefile中的一点知识
- .Net中DataGridview数据如何导出到excel表
- 醉月湖畔,为谁染红妆
- 还是A+B
- 重天乾 4-3
- C 语言,将两个数组合并到另外一个数组中,并且合并之后的数组是有序的。
- error: Error retrieving parent for item: No resource found that matches the given name 'android:Them