首页 > 代码库 > POJ 1657 Distance on Chessboard
POJ 1657 Distance on Chessboard
中文题。
【分析】:这题思路建立其实应该主要在对象的操作上,如何求出象走的步数是关键,其他的都比较好想到。
对于象,可以将棋盘上的格点分为两类:第一类是它的横坐标与纵坐标只差为奇数;第二类是差为偶数。
因为象每走一步,其横纵坐标增加或减少的绝对值是相等的,所以其横纵坐标的绝对值只差的奇偶性是不变的。所以如果出发时的横纵坐标差值是奇或偶,则终点一定是与其出发的点的奇偶性相同的,不相同就输出INF。而后如果 x==y,则一步就可以到达,如果不等,就2步到达。
详见代码:
//220k 0ms #include<iostream> using namespace std; int main() { int T; char begin[3],end[3]; int x,y; cin>>T; while(T--) { cin>>begin>>end; x = abs(begin[0] - end[0]); y = abs(begin[1] - end[1]); if(x == 0&&y == 0) printf("0 0 0 0\n"); else{ // 王的步数 if(x<y) cout<<y<<" "; else cout<<x<<" "; // 后的步数 if(x == y|| x == 0|| y == 0) cout<<"1"<<" "; else cout<<"2"<<" "; // 车的步数 if(x == 0 || y == 0) cout<<"1"<<" "; else cout<<"2"<<" "; // 象的步数 if(abs(x-y)%2!=0) cout<<"Inf"<<endl; // 这个差值即是确定横纵坐标的分类是否相同的数值,如果都是奇数或者偶数, //则差值一定是偶数,代表起点与终点是一类可以到达,否则永远不能到达。 else if( x == y ) cout<<"1"<<endl; else cout<<"2"<<endl; } } return 0; }
POJ 1657 Distance on Chessboard
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。