2019.2.13小白之路:棋盘上的距离

问题描述

国际象棋的棋盘是黑白相间的 8 * 8 的方格,棋子放在格子中间。如图2-1所示:
在这里插入图片描述
王、后、车、象的走子规则如下: 王:横、直、斜都可以走,但每步限走一格。 后:横、直、斜都可以走,每步格数不受限制。
车:横、竖均可以走,不能斜走,格数不限。 象:只能斜走,格数不限。
写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置 所需的最少步数。

输入数据

第一行是测试数据的组数 t(0 <= t <= 20)。以下每行是一组测试数据,每组包括棋盘上的两个位置,第一个是起始位置,第二个是目标位置。位置用"字母-数字"的形式表示, 字母从"a"到"h",数字从"1"到"8"。

输出要求

对输入的每组测试数据,输出王、后、车、象所需的最少步数。如果无法到达,就输出"Inf"

输入样例

2
a1 c3
f5 f8 

输出样例

2 1 2 1
3 1 1 Inf 

代码段

#include <cstdio>
#include <math.h>

int main() {
	int nCases, i;
	scanf("%d", &nCases);
	for (int i = 0; i < nCases; i++) {
		char begin[5], end[5];
		int x, y;
		scanf("%s %s", &begin, &end);
		x = abs(begin[0] - end[0]);
		y = abs(begin[1] - end[1]);
		if (x == 0 && y == 0)
			printf("0 0 0");
		else {
			//王的步数,横、直、斜都能走,每次只能走一步
			printf("%d ", x > y ? x : y);
			//后的步数,横、直、斜都能走,每步格数不收限制
			if (x == y || x == 0 || y == 0)
				printf("1 ");
			else
				printf("2 ");
			//车的步数,不能斜走,格数不限
			if (x == 0 || y == 0)
				printf("1 ");
			else
				printf("2 ");
			//象的步数,只能斜走,格数不限
			if (abs(x - y) % 2 != 0)
				printf("Inf");
			else if (x == y)
				printf("1\n");
			else
				printf("2\n");
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/shensen0304/article/details/87170503
今日推荐