POJ_1657_Distance on Chessboard

/* 棋盘上,无论起点和终点在什么位置: 1.王:移动步数是横纵坐标的差值的最大值; 2.后:8个方向的直线式一步,其余2步。 3.车:水平竖直4个方向一步,其余2步。 4.象:注意到棋盘上横纵坐标和的奇偶性,可知只有和起点类型一样的才能到达 否则不可达;若起终点在一条直线上,一步,否则需要2步 */ #include<stdio.h> int abs(int x) { if(x>0) return x; else return -x; } int king(int a,int b,int c,int d) { if(abs(a-c)>abs(b-d)) printf("%d ",abs(a-c)); else printf("%d ",abs(b-d)); return 0; } int queen(int a,int b,int c,int d) { if(a==c||b==d||abs(c-a)==abs(d-b)) printf("1 "); else printf("2 "); return 0; } int car(int a,int b,int c,int d) { if(a==c||b==d) printf("1 "); else printf("2 "); return 0; } int elephant(int a,int b,int c,int d) { if(((a+b)&1)!=((c+d)&1))///!=优先级高于$ printf("Inf/n"); else { if(abs(a-c)==abs(b-d)) printf("1/n"); else printf("2/n"); } return 0; } int main() { int cas; int x1,y1,x2,y2; char c1,c2; scanf("%d",&cas); getchar(); while(cas--) { c1=getchar(); c2=getchar(); x1=9-(c1-96); y1=c2-'0'; getchar(); c1=getchar(); c2=getchar(); x2=9-(c1-96); y2=c2-'0'; getchar(); if(x1==x2&&y1==y2) { printf("0 0 0 0/n"); continue; } king(y1,x1,y2,x2); queen(y1,x1,y2,x2); car(y1,x1,y2,x2); elephant(y1,x1,y2,x2); } }

你可能感兴趣的:(POJ_1657_Distance on Chessboard)