首页 > 其他分享 >曼哈顿距离矩阵

曼哈顿距离矩阵

时间:2023-09-06 20:34:11浏览次数:73  
标签:12 Dist 象限 曼哈顿 矩阵 距离 int abs

曼哈顿距离矩阵

码题集OJ-曼哈顿距离矩阵 (matiji.net)

这道题主要是寻找规律然后总结出对应的表达式求解。

从图中可以看出数字的增加是一层一层增长,每次的增加量为4。在图中分别标出来每个象限的推导点。

我们有题目可知,我们需要求得的曼哈顿距离都是输入的(x,y)到原点(0,0)的距离刚好对应的是该点所在的层数。比如(2,1),Dist=|2-0|+|1-0|=3,(2,1)在第三层。

所以距离为Dist=|x|+|y|代码如下:

int Dist=abs(x)+abs(y)

然后寻找关系,(1,2)的值对应的是13,前两层的值的数量为(4+8)=12,所以13=x+12=1+12=13;

我们需要求到该层数前面所以层数的数字的数量量一共有多少。

for(int i=1;i<Dist;i++)
S+=4*i;//因为每层的数量都为4的倍数

可以得到在第一象限的值的表达式为S+x

if(x>0&&y>=0)
cout<<S+x<<'\n';//输出第一象限对应坐标的值

可以看出这道题就是为了推导坐标与Dist以及层数的关系,从而来得到对应坐标的填入的数字。

可以推导出第四象限:例子为(2,-1),Dist=3,S=12,填入的数字为16;可以知道16=12+4;

然后能够让两数相加得到4的只有Dist+(-y)=3+1=4;

所以可以得到第四象限填入数字的表达式为S+Dist+(-y);

if(x>=0&&y<0)
cout<<S+Dist+(-y)<<'\n';//输出第四象限对应坐标的值

其他象限的推导过程同样;

第三象限的表达式为S+2*(Dist)+(-x);

if(x<0&&y<=0)
cout<<S+2*Dist+(-x)<<'\n';//输出第三象限对应坐标的值

第二象限的表达式为S+3*(Dist)+y;

if(x<=0&&y>0)
cout<<S+3*Dist+y<<'\n';//输出第二象限对应坐标的值

完整的代码入下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int x,y,S;
	cin>>x>>y;
	int Dist=abs(x)+abs(y);
	for(int i=1;i<Dist;i++)
		S+=4*i;
	if(Dist==0)
		cout<<0<<'\n';//输入为(0,0)
	if(x>0&&y>=0)
		cout<<S+x<<'\n';//输出第一象限对应坐标的值
	else if(x<=0&&y>0)
		cout<<S+3*Dist+y<<'\n';//输出第二象限对应坐标的值
	else if(x<0&&y<=0)
		cout<<S+2*Dist+(-x)<<'\n';//输出第三象限对应坐标的值
	else if(x>0&&y<0)
		cout<<S+Dist+(-y)<<'\n';//输出第四象限对应坐标的值
return 0;
}

作为萌新想记录学习C++的生活,希望提出一些建议,感谢!

标签:12,Dist,象限,曼哈顿,矩阵,距离,int,abs
From: https://www.cnblogs.com/Gandalf-T/p/17683318.html

相关文章

  • 单应矩阵及图像拼接的延申
    最近在研究两个相机的图像拼接问题。偶然读到了一篇博客,突然发现这篇博文的作者功力相当深厚,对单应矩阵和深度图像的研究都很独到。特此记录以下:https://zhuanlan.zhihu.com/p/636135357https://zhuanlan.zhihu.com/p/608660362附作者和他的研究内容,其他文章也很不错。  ......
  • Python练习:嵌套列表解析,讲3*4的矩阵转换成4*3的矩阵
      1#嵌套列表解析,讲3*4的矩阵转换成4*3的矩阵23matrix=[[1,2,3,4],4[5,6,7,8],5[9,10,11,12]]678forrowinmatrix:9print("遍历每一行:",row)101112print("\n")1314s=[[row[i]forrow......
  • MIT 18.06 线性代数 - 22. 对角化和矩阵的幂
    关于斐波那契数列计算第n个数,使用矩阵特征向量和特征值求解:Fibonacci数列的定义是:\(F(0)=0\),\(F(1)=1\)并且对于\(n>1\),\(F(n)=F(n-1)+F(n-2)\)。我们可以使用线性代数中的特征向量和特征值来求解Fibonacci数列。首先,我们可以将Fibonacci数列写为一个线性系统的形式:\[\b......
  • 邻接矩阵的DFS
    采用递归的方法1#include<stdio.h>2#include<stdlib.h>34#defineMaxSize2056typedefstruct{7intVer[MaxSize];8intEdge[MaxSize][MaxSize];9intVerNum;10intEdgeNum;11}Graph;1213voidCreat......
  • VIM更改TAB距离
    linux下使用vim编程是比較常见的事情,但vim默认的tab是8个空格。但一般的编辑器是4个空格,所以希望改动下。详细方法例如以下:1.创建文件名称为.vimrc的系统文件首先切换到用户根文件夹,然后创建文件。$cd~$vim.vimrc2.在文件里输入以下的内容并保存settabstop=4setshiftwid......
  • 全局多项式(趋势面)与IDW逆距离加权插值:MATLAB代码
      本文介绍基于MATLAB实现全局多项式插值法与逆距离加权法的空间插值的方法,并对不同插值方法结果加以对比分析。目录1背景知识2实际操作部分2.1空间数据读取2.2异常数据剔除2.3验证集筛选2.4最小二乘法求解2.5逆距离加权法求解2.6插值精度检验2.7数据导出与专题地图制......
  • 向量,矩阵,线性基
    向量定义既有大小又有方向的量称为向量,记作$\vec{a}$。如果这个向量还有一个起点,那么它就成为了一条有向线段。有向线段三要素:起点,方向,长度。有向线段$\overrightarrowAB$......
  • 邻接矩阵的BFS
    intArrNum(GraphG,intver){for(inti=0;i<G.VerNum;i++)if(G.Ver[i]==ver)returni;elsereturn-1;}intFirstNeighbor(GraphG,intver){intx=ArrNum(G,ver);for(inti=0;i<G.VerNum;i++){......
  • 挑程:矩阵乘积链(区间dp)
    传送区间dp点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=110;intp[N],dp[N][N];voidsolve(){intn;cin>>n;for(inti=1;i<=n;++i)cin>>p[i-1]>>p[i];memset(dp,0x3f,sizeofdp);for(inti......
  • Oracle客户端与Oracle数据库兼容矩阵
    Oracle客户端与Oracle数据库之间是有兼容支持关系的,有些低版本的OracleClient连接到高版本的数据库是不支持的,其实Oracle官方文档Client/ServerInteroperabilitySupportMatrixforDifferentOracleVersions(DocID207303.1)[1]中有详细的介绍,如果你要升级数据库的话或......