棋盘上的距离

王、后、车、象的走子规则如下:
王:横、直、斜都可以走,但每步限走一格。
后:横、直、斜都可以走,每步格数不受限制。
车:横、竖均可以走,不能斜走,格数不限。
象:只能斜走,格数不限。

写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置

所需的最少步数。

输入数据
第一行是测试数据的组数 t 0 <= t <= 20)。以下每行是一组测试数据,每组包括棋盘
上的两个位置,第一个是起始位置,第二个是目标位置。位置用"字母-数字"的形式表示,
字母从"a""h",数字从"1""8"
输出要求
对输入的每组测试数据,输出王、后、车、象所需的最少步数。如果无法到达,就输出
"Inf".


#include <iostream>
using namespace std;
int main()
{
	int nCases,i;
	cin>>nCases;
	for(i=0;i<nCases;i++)
	{
		char begin[5],end[5];//用begin和end分别存储棋子的起止位置 
		cin>>begin>>end;
		int x=abs(begin[0]-end[0]);//用x和y分别表示起止位置之间x方向和y方向的
		 							//距离 
		int y=abs(begin[1]-end[1]);
		if(x==0&&y==0)
		   cout<<0<<" "<<0<<" "<<0<<" "<<0<<endl;
  		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; 
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 欧氏距离、街区距离棋盘距离都是衡量两点之间距离的方式。它们之间的关系可以通过以下几点来比较: 1. 欧氏距离是最常用的距离计算方式,它计算两点之间的线距离。街区距离是两点在各个坐标轴上的距离之和,而棋盘距离是两点在各个坐标轴上的距离的最大值。 2. 欧氏距离计算的结果是一个实数值,街区距离棋盘距离计算的结果都是整数值。这意味着在实际应用中,欧氏距离更精细。 3. 三种距离计算方式在不同的应用场景中有不同的优缺点。例如,在计算图像相似度时,欧氏距离更适合;而在计算城市街区之间的距离时,街区距离更具实际意义。 总之,欧氏距离、街区距离棋盘距离之间的关系取决于具体的应用场景和计算目的。 ### 回答2: 欧氏距离、街区距离棋盘距离都是用于衡量两个点之间的距离或相似性的度量方式。 欧氏距离是欧几里得空间中两点之间的线距离。它是最观的距离度量方法,计算公式为√((x2-x1)^2+(y2-y1)^2)。它在连续空间中广泛应用,适用于计算数值型数据的相似度。它的计算结果是非负的实数。 街区距离,又称曼哈顿距离或L1距离,是两点之间在所有维度上的距离总和。它的计算公式为|x2-x1|+|y2-y1|。街区距离适用于计算分类型数据的相似度,比如离散的特征属性。它的计算结果也是非负的实数。 棋盘距离,又称切比雪夫距离或L∞距离,是两点在各维度上的最大差值。计算公式为max(|x2-x1|, |y2-y1|)。棋盘距离适用于计算图像或排列等特征的相似性。同样地,它的计算结果是非负的实数。 三种距离的关系是:欧氏距离 ≤ 街区距离棋盘距离。这是因为欧氏距离是两点之间最短的线距离,街区距离是在各维度上的距离总和,而棋盘距离是在各维度上的最大差值。因此,棋盘距离一定大于等于街区距离,街区距离一定大于等于欧氏距离。 根据不同的应用场景和数据类型,可以选择适合的距离度量方法来计算相似性。 ### 回答3: 欧氏距离、街区距离棋盘距离是常用于衡量两点之间距离的度量方法。它们可以应用于各种领域,例如数据分析、地理信息系统以及网络路由等。 首先,欧氏距离是最常见的度量方法,也是我们最熟悉的距离概念。它是利用两点之间的线距离来计算的。欧氏距离的计算公式是d = sqrt((x2-x1)^2+(y2-y1)^2),其中(x1, y1)和(x2, y2)表示两个点的坐标。欧氏距离比较适用于连续的数据,例如地理坐标、温度等。 其次,街区距离也被称为曼哈顿距离。它是沿着网格线从一个点到另一个点所需的距离。街区距离的计算公式是d = |x2-x1| + |y2-y1|。相比于欧氏距离,街区距离更适用于离散的数据,例如城市街区之间的距离。 最后,棋盘距离也被称为切比雪夫距离,它是通过在网格线上移动到目标点所需的最少步数来计算的。棋盘距离的计算公式是d = max(|x2-x1|, |y2-y1|)。与街区距离类似,棋盘距离也适用于离散的数据,但它更注重路径的最优性。 总结来说,欧氏距离是最常见的计算两点之间距离的方法,适用于连续的数据;街区距离适用于离散数据,以网格线为参考;而棋盘距离也适用于离散数据,但更关注路径的最短步数。在具体应用中,选择合适的距离度量方法有助于更准确地描述和计算两点之间的距离
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值