CF 3A-Shortest path of the king 点击打开链接
题意:在国际象棋棋盘上求国王到皇后的距离,并打印走法,国王可以向周围8个方向移动
思路:先将国王和皇后的坐标装换为直角坐标,如字母 B 对应 B-'A'=1.然后分别求出横坐标,纵坐标的差,两者的绝对值就是要走的步数,不理解的可以自己再纸上画一下。打印路径的话 ,则看差值的正负即可。
#include <iostream> #include<cmath> using namespace std; int main() { char sx,ex; int sy,ey; int a,b; cin>>sx>>sy; cin>>ex>>ey; a=sx-ex; b=sy-ey; int o=abs(a); int p=abs(b); int ans= o < p ? o : p; ans+=abs(o-p); cout<<ans<<endl; while(a>0&&b>0){ a-=1; b-=1; cout<<"LD"<<endl; } while(a<0&&b<0){ a+=1; b+=1; cout<<"RU"<<endl; } while(a>0&&b<0){ a-=1; b+=1; cout<<"LU"<<endl; } while(a<0&&b>0){ a+=1; b-=1; cout<<"RD"<<endl; } if(a==0&&b!=0){ while(b>0){ b-=1; cout<<"D"<<endl; } while(b<0){ b+=1; cout<<"U"<<endl; } } else if(a!=0&&b==0){ while(a>0){ a-=1; cout<<"L"<<endl; } while(a<0){ a+=1; cout<<"R"<<endl; } } return 0; }