BFS不解釋
#include <map>#include <set>#include <list>#include <queue>#include <deque>#include <stack>#include <string>#include <time.h>#include <cstdio>#include <math.h>#include <iomanip>#include <cstdlib>#include <limits.h>#include <string.h>#include <iostream>#include <fstream>#include <algorithm>using namespace std;#define LL long long#define MIN INT_MIN#define MAX INT_MAX#define PI acos(-1.0)#define FRE freopen("input.txt","r",stdin)#define FF freopen("output.txt","w",stdout)#define N 100005char s[3];char t[3];struct node{ int x,y;};int d[8][2] = {-1,-1, -1,0, -1,1, 0,1, 1,1, 1,0, 1,-1, 0,-1};char dd[8][3] = {"LD", "L\0", "LU", "U\0", "RU", "R\0", "RD", "D\0"};queue<node> qq;vector<string> v;int dis(node a,node b){ return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);}void gao() { int i,j; while (!qq.empty()) { qq.pop(); } node tmp; tmp.x = s[0] - 'a' + 1; tmp.y = s[1] - '0'; qq.push(tmp); node end; end.x = t[0] - 'a' + 1; end.y = t[1] - '0'; if(tmp.x == end.x && tmp.y == end.y){ puts("0"); return ; } while ( !qq.empty() ) { tmp = qq.front(); qq.pop();// int id; int minm = MAX; node tt; for (i = 0; i < 8; i++) { tt.x = tmp.x + d[i][0]; tt.y = tmp.y + d[i][1]; if (tt.x >= 1 && tt.x <= 8 && tt.y >= 1 && tt.y <= 8) { if (dis(end, tt) < minm) { minm = dis(end, tt); id = i; } } } tt.x = tmp.x + d[id][0]; tt.y = tmp.y + d[id][1]; v.push_back(dd[id]); qq.push(tt); if(tt.x == end.x && tt.y == end.y){break;}/* if(cnt==7){ cout<<tt.x<<" "<<tt.y<<endl; break; }*/ } cout<<v.size()<<endl; for (i = 0; i < v.size(); i++) { cout<<v[i]<<endl; }}int main(){ scanf("%s%s",s,t); gao(); return 0;}