code forces 3A Shortest path of the king 题目链接:http://codeforces.com/problemset/problem/3/A
题目大意:国际象棋的棋盘,给出两个位置,求第一个位置到第二个位置的最短路径长度及路线(八方)。
题目分析:用不着搜索,模拟即可(有点曼哈顿距离的意思)。
code :
#include<stdio.h>
#include<queue>
#include<string>
#include<iostream>
using namespace std;
int main()
{
int n,x1,x2,y1,y2,shift1,shift2;
char s1[5],s2[5];
while(scanf("%s%s",s1,s2)!=EOF)
{
queue<string>q;
x1=s1[0]-'a';
y1=s1[1]-'1';
x2=s2[0]-'a';
y2=s2[1]-'1';
while(x1!=x2||y1!=y2)
{
shift1=x1<x2?-1:x1==x2?0:1;
shift2=y1<y2?-1:y1==y2?0:1;
switch(shift1)
{
case -1:
if(shift2<0)q.push("RU"),x1++,y1++;
else if(shift2>0)q.push("RD"),x1++,y1--;
else q.push("R"),x1++;
break;
case 0:
if(shift2<0)q.push("U"),y1++;
else q.push("D"),y1--;
break;
case 1:
if(shift2<0)q.push("LU"),x1--,y1++;
else if(shift2>0)q.push("LD"),x1--,y1--;
else q.push("L"),x1--;
}
}
printf("%d\n",q.size());
while(!q.empty())
{
cout<<q.front()<<endl;
q.pop();
}
}
return 0;
}
PS :1A好高兴……