骑士的移动
2015-07-25 08:46
351 查看
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83498#problem/E
题意:
输入标准8*8国际象棋棋盘上的两个格子(列用a~h表示,行用1~8表示),求马最少需要多少步从起点跳到终点。(可输入多组案例)
input:
e2 e4
a1 b2
b2 c3
f6 f6
output:
To get from e2 to e4 takes 2 knight moves.
To get from a1 to b2 takes 4 knight moves.
To get from b2 to c3 takes 2 knight moves.
To get from f6 to f6 takes 0 knight moves.
思路分析:
求的是最短路,可以用BFS。
要先把马会走的8个方向记为一个坐标变化的二维数组,a~h转化为1~8,设立一个二维数组记录马所到过的坐标。
注意:马不能离开棋盘,马不能再次到达它所到过的地方。
再利用BFS求最短路。
源代码如下:
题意:
输入标准8*8国际象棋棋盘上的两个格子(列用a~h表示,行用1~8表示),求马最少需要多少步从起点跳到终点。(可输入多组案例)
input:
e2 e4
a1 b2
b2 c3
f6 f6
output:
To get from e2 to e4 takes 2 knight moves.
To get from a1 to b2 takes 4 knight moves.
To get from b2 to c3 takes 2 knight moves.
To get from f6 to f6 takes 0 knight moves.
思路分析:
求的是最短路,可以用BFS。
要先把马会走的8个方向记为一个坐标变化的二维数组,a~h转化为1~8,设立一个二维数组记录马所到过的坐标。
注意:马不能离开棋盘,马不能再次到达它所到过的地方。
再利用BFS求最短路。
源代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; int s[8][2]={{2,-1},{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2}}; //八个方向 int ch[10][10]; struct node { int x,y,count; }a,b; int main() { char c1,c2; int r1,r2,c3,c4; while(cin>>c1>>r1>>c2>>r2) { c3=c1-'a'+1; c4=c2-'a'+1; memset(ch, 0, sizeof(ch)); //地图清零,以便记录马是否到过 ch[c3][r1]=1; b.x=c3;b.y=r1;b.count=0; queue<node> d; d.push(b); while(!d.empty()) //BFS { a=d.front(); d.pop(); if(a.x==c4&&a.y==r2)break; for(int i=0;i<8;i++) { b.x=a.x+s[i][0]; b.y=a.y+s[i][1]; if(b.x<1||b.x>8||b.y<1||b.y>8)continue; if(ch[b.x][b.y]==1)continue; ch[b.x][b.y]=1; b.count=a.count+1; d.push(b); } } printf("To get from %c%d to %c%d takes %d knight moves.\n",c1,r1,c2,r2,a.count); } return 0; }
相关文章推荐
- linux初学(一)之命令行bash的基本操作
- HDU5290树形DP一颗树扔炸弹几次能炸完
- hdoj 1234开门人和关门人
- C# KeyDown KeyPress KeyUp 处理相应的键盘事件
- java 产生的固体物的基础上 增删改的SQL声明
- 编程工作报告模板
- Oracle connect by 树查询之二
- 暑假NOIP笔记—搜索
- Win10统一应用商店将在7月29日开业 开发者将会收到最终版本的Win10
- linux mkfs命令参数及用法详解---linux格式化文件系统命令(包括swap分区)
- [Domino]如何用java远程访问Domino邮箱数据
- 1060. Are They Equal (25)
- 工作日志2014-08-27
- 消息系统Kafka介绍
- NSString以及NSArray的习题练习
- 快快快!27个提升效率的iOS开源库推荐
- SI编程器
- 黑马程序员——Java基础-异常
- Android 权限大全
- spring task定时器的运用