这个题目挺有意思的,给定 起终点,要你求车,象,王分别最少要走多少步
车横竖都能走,而且每步任意走几格,所以它是最容易处理的,如果在同行或者同列,就是1,否则就是2
象要找下规律,象任意对角线都能走,而且每步任意走几格,这个时候,发现图上的黑白色块给了很大提示,如果两个本身在同一对角线,就是1,如果不在,就要判断下是否在同一色块,是就是2,否则,就走不到,输出0,至于判断是否为同一色块,非常简单,代码中给出。
其实王也是非常简单的,八个方向都能走,但是每次只能走一步,只是我好脑残,连象的规律都找出来了,偏偏王还在一步步分情况,最后发现,其实不管是在八个方向内,还是不在八个方向上,最终走的步数就是 max(fabs(x1-x2),fabs(y1-y2))..简直不想说自己。。。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int a,b,c,d; int maps[10][10]; int fabs(int x,int y) { if (x>y) return x-y; else return y-x; } int rock() { if (a==c || b==d) return 1; else return 2; } int judge (int x,int y) { if ((x&1) && (y&1)) return 1; if (!(x&1) && !(y&1)) return 1; return 0; } int bishop() { if (a-b==c-d || a+b==c+d) return 1; if (judge(a,b)==judge(c,d)) return 2; else return 0; } int king() { return max(fabs(a,c),fabs(b,d)); } int main() { while (scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF) { printf("%d %d %d\n",rock(),bishop(),king()); } return 0; }