HDU1372 Knight Moves BFS
来源:互联网 发布:java怎么求最小公倍数 编辑:程序博客网 时间:2024/05/17 08:42
题目大意:在一张8×8的国际象棋棋盘上(其中纵坐标用a-h表示,横坐标用1-8表示),给你一枚骑士的起点坐标和要到达的终点坐标,让你求出骑士要走的最小步数。
分析:其实这道题的难点就在于很多人并不知道骑士是怎么移动的,其实国际象棋中的其实相当于中国象棋中的马,他的移动轨迹的“日”字形的,只是少了中国象棋中的“蹩马腿”这一说。知道了这一点,这道题就简单多了,很水的一道BFS题目。
实现代码如下:
#include <cstdio>#include <iostream>#include <cstring>using namespace std;bool s[10][10];int dir[8][2]={{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2}};typedef struct node{ int x,y,tmp;}point;point que[100];int sx,sy,ex,ey;void bfs(){ int cmp1=1,cmp2=1; int x,y; que[cmp1].x=sx; que[cmp1].y=sy; que[cmp1].tmp=0; s[sx][sy]=true; while(cmp1<=cmp2&&!s[ex][ey]) { for(int i=0;i<8;i++) { x=que[cmp1].x+dir[i][0]; y=que[cmp1].y+dir[i][1]; if(x<=8&&x>0&&y<=8&&y>0&&!s[x][y]) { cmp2++; que[cmp2].x=x; que[cmp2].y=y; que[cmp2].tmp=que[cmp1].tmp+1; s[x][y]=true; } } cmp1++; } printf("%d knight moves.\n",que[cmp2].tmp);}int main(){ char a,b; int c,d; while(cin>>a>>c>>b>>d) { memset(s,false,sizeof(s)); sx=a-'a'+1; sy=c; ex=b-'a'+1; ey=d; printf("To get from %c%d to %c%d takes ",a,c,b,d); bfs(); } return 0;}
0 0
- Knight Moves hdu1372 bfs
- HDU1372:Knight Moves(BFS)
- hdu1372 Knight Moves (BFS)
- HDU1372:Knight Moves(BFS)
- hdu1372 Knight Moves(BFS)
- hdu1372 Knight Moves(BFS)
- HDU1372 Knight Moves BFS
- HDU1372:Knight Moves(BFS)
- HDU1372 Knight Moves(BFS)
- hdu1372-Knight Moves BFS
- HDU1372 Knight Moves (BFS)
- hdu1372 Knight Moves(BFS)
- HDU1372 Knight Moves(BFS)
- hdu1372 Knight Moves (BFS)
- HDU1372 Knight Moves(BFS)
- HDU1372 Knight Moves(bfs)
- HDU1372(BFS)Knight Moves
- HDU1372 Knight Moves(bfs)
- OC方法和文件编译
- 计算1-100中含有9的数字
- Mac下搭建php开发环境【转】 有一处改动写在最前面了
- [LeetCode]N-Queens I and II
- java发送http的get、post请求
- HDU1372 Knight Moves BFS
- 新学到几个 权限特地记一下
- ibatis连接两个数据量
- 在线画流程图等工具
- Android:为WebView中的Java与JavaScript的交互漏洞提供【安全可靠】的多样互通方案
- 一个超简单的系统内核
- win7下64位 librtmp编译
- 编写linux模块(由浅入深)
- Linux中的特殊目录之/tmp