UVA 439 Knight Moves
来源:互联网 发布:程序员找工作最佳月份 编辑:程序博客网 时间:2024/05/16 03:25
题目:给出国际象棋棋盘中的两个点,求马从一个点跳到另一个点的最少步数。
#include <iostream>#include<queue>using namespace std;struct RA{ int c; int r; RA(int a = 0, int b = 0){c = a; r = b;}; RA(char a,char b){c = int(a - 'a');r = int(b -'1');}; char ioc(){return char(c+int('a'));}; char ioi(){return char(r + int('1'));}; bool friend operator == (RA a, RA b){return (a.c == b.c)&&(a.r == b.r);};};const int SIZE = 8;class Knight{private: RA SA; RA SB; int board[SIZE][SIZE];public: void initial(); bool readData(); void computing(); void outResult();};void Knight::initial() {for(int i = 0;i < SIZE; i++){ for(int j = 0; j < SIZE; j++) board[i][j]=-2;}}bool Knight::readData(){char c,r;cin>>c>>r;SA = RA(c,r);cin>>c>>r;SB = RA(c, r);return !cin.eof();}void Knight::outResult(){cout<<"To get from "<<SA.ioc()<<SA.ioi();cout<<" to "<<SB.ioc()<<SB.ioi()<<" takes ";cout<<board[SB.c][SB.r]<<" knight moves."<<endl;}void Knight::computing(){RA ns,s;const int dr[8]={2,1,-1,-2,-2,-1,1,2};const int dc[8]={1,2,2,1,-1,-2,-2,-1};queue<RA> q;board[SA.c][SA.r] = 0;q.push(SA);while(!q.empty()){ s = q.front(); q.pop(); if(s == SB) break; else{ for(int i = 0; i < 8; i++){ ns = RA(s.c + dc[i], s.r + dr[i]); if((0 <= ns.c)&&(ns.c < 8)&&(0 <= ns.r)&&(ns.r < 8)) { if(board[ns.c][ns.r] < 0){ board[ns.c][ns.r] = 1 + board[s.c][s.r] ; q.push(ns); } } } }}}int main(){ Knight ss; while(ss.readData()){ ss.initial(); ss.computing(); ss.outResult(); } return 0;}
0 0
- uva 439 knight moves
- uva 439 - Knight Moves
- uva 439 - Knight Moves
- uva 439 - Knight Moves
- uva 439 - Knight Moves
- uva-439 - Knight Moves
- UVa 439 - Knight Moves
- UVa 439 - Knight Moves
- UVA 439 - Knight Moves
- uva 439 Knight Moves
- UVa 439 - Knight Moves
- uva 439 - Knight Moves
- UVa:439 Knight Moves
- uva 439 - Knight Moves
- uva 439 Knight Moves
- UVa 439 - Knight Moves
- uva 439 - Knight Moves
- UVA 439 - Knight Moves
- 游戏编程十年总结
- 机房收费系统(一)——解决子窗体被picturebox覆盖
- window版本及适合的visual studio
- 免费!全网!真正的听歌下载神器
- 《编程导论(Java)•0.1 编程与计算机科学》
- UVA 439 Knight Moves
- Django中扩展Paginator实现分页
- linux的centos7的数据库连接本地navi cat需要注意的
- Android M原生BUG,手机使用过程中SystemServer空指针异常导致手机重启
- 安卓入门--接口回调机制
- Java内存模型深度解读
- ARC的__weak和unsafe_unretained
- 阵前第一功
- Linux 下编译安装 Python 3.4