cf A. Shortest path of the king 简单存路径bfs
来源:互联网 发布:剑灵灵族男捏脸数据吧 编辑:程序博客网 时间:2024/05/21 03:59
The king is left alone on the chessboard. In spite of this loneliness, he doesn't lose heart, because he has business of national importance. For example, he has to pay an official visit to square t. As the king is not in habit of wasting his time, he wants to get from his current position s to square t in the least number of moves. Help him to do this.
In one move the king can get to the square that has a common side or a common vertex with the square the king is currently in (generally there are 8 different squares he can move to).
The first line contains the chessboard coordinates of square s, the second line — of square t.
Chessboard coordinates consist of two characters, the first one is a lowercase Latin letter (from a to h), the second one is a digit from 1 to 8.
In the first line print n — minimum number of the king's moves. Then in n lines print the moves themselves. Each move is described with one of the 8: L, R, U, D, LU, LD, RU or RD.
L, R, U, D stand respectively for moves left, right, up and down (according to the picture), and 2-letter combinations stand for diagonal moves. If the answer is not unique, print any of them.
a8h1
7RDRDRDRDRDRDRD
//30 ms 0 KB#include<stdio.h>#include<string.h>#include<iostream>#include<queue>#define M 10using namespace std;int dir[8][2]= {{0,1},{0,-1},{1,0},{1,-1},{1,1},{-1,0},{-1,1},{-1,-1}};int g[M][M];int s_x,s_y,e_x,e_y;bool vis[M][M];struct sa{ int x,y,step;} path[30],p[9][9];void bfs(){ sa pre; queue<sa>q; pre.x=s_x; pre.y=s_y; pre.step=0; q.push(pre); vis[s_x][s_y]=1; while(!q.empty()) { sa now=q.front(),next; q.pop(); if(now.x==e_x&&now.y==e_y) { int ans=now.step; printf("%d\n",ans); for(int d=ans; d>=0; d--) { path[d]=now; now=p[now.x][now.y]; } if(path[1].x==s_x-1)//先判断第一个点和起点之间的距离 { if(path[1].y==s_y-1)printf("LD\n"); else if(path[1].y==s_y)printf("D\n"); else if(path[1].y==s_y+1)printf("RD\n"); } else if(path[1].x==s_x) { if(path[1].y==s_y-1)printf("L\n"); else if(path[1].y==s_y+1)printf("R\n"); } else if(path[1].x==s_x+1) { if(path[1].y==s_y-1)printf("LU\n"); else if(path[1].y==s_y)printf("U\n"); else if(path[1].y==s_y+1)printf("RU\n"); } for(int i=2; i<=ans; i++)//判断剩下都点和前面的点之间的关系 { if(path[i].x==path[i-1].x-1) { if(path[i].y==path[i-1].y-1)printf("LD\n"); else if(path[i].y==path[i-1].y)printf("D\n"); else if(path[i].y==path[i-1].y+1)printf("RD\n"); } else if(path[i].x==path[i-1].x) { if(path[i].y==path[i-1].y-1)printf("L\n"); else if(path[i].y==path[i-1].y+1)printf("R\n"); } else if(path[i].x==path[i-1].x+1) { if(path[i].y==path[i-1].y-1)printf("LU\n"); else if(path[i].y==path[i-1].y)printf("U\n"); else if(path[i].y==path[i-1].y+1)printf("RU\n"); } } break; } for(int i=0; i<8; i++)//判断8个方向 { int xx=now.x+dir[i][0]; int yy=now.y+dir[i][1]; if(xx>=1&&xx<=8&&yy>=1&&yy<=8&&!vis[xx][yy])//如果没有越界 { vis[xx][yy]=1; next.x=xx; next.y=yy; next.step=now.step+1; p[next.x][next.y]=now;//存路径 q.push(next); } } }}int main(){ char s1,e1; while(cin>>s1>>s_x>>e1>>e_x) { memset(vis,0,sizeof(vis)); s_y=s1-'a'+1; e_y=e1-'a'+1; bfs(); } return 0;}
- cf A. Shortest path of the king 简单存路径bfs
- CF 3A Shortest path of the king
- cf 3a Shortest path of the king
- Codeforces 3A-Shortest path of the king(BFS打印路径)
- Codeforces 3A Shortest path of the king BFS
- Codeforces 3A Shortest path of the king(BFS???NO!!)
- 【pair_简单贪心】#3 A. Shortest path of the king
- A - Shortest path of the king
- A. Shortest path of the king
- A. Shortest path of the king
- 3A - Shortest path of the king
- Shortest path of the king
- Shortest path of the king
- codeforces-3A-Shortest path of the king( 棋盘最短路径 + 贪心 )
- Shortest path of the king(比赛2.A)
- coderforce 3A-Shortest path of the king
- codeforces 3A - Shortest path of the king
- code forces 3A Shortest path of the king
- 学习JS不错的网站(纯收集)
- 联合(union)用法
- NIOS2 uCLinux-mmu 驱动之hello_world
- AIX6.1安装SSH
- poj2653(判断两线段相交)
- cf A. Shortest path of the king 简单存路径bfs
- hdu1677--Nested Dolls(贪心+LIS)
- 选择排序(非冒泡排序)我也不懂了 第一个算冒泡排序了吗?
- iotop
- 多态的理解
- 在Mac下,深度学习CNN库Overfeat的配置及使用
- 判断单链表里面有没有环
- java生成的菜单被窗口挡住
- 三维坐标系的旋转矩阵