查找距矩阵距离 k 以内的元素
给定一个*n矩阵和一个值k,我们如何找到每个元素的所有邻居? 例如:在 4*4
矩阵中,k=2
假设矩阵为:
[ 1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16]
其中这些值是位置的索引,1 的邻居是 1,2,3,5,6,9
。值 3,6 和 9
出现只是因为 k =2,如果 k = 1,则不会出现。
类似地,6 的邻居将是 1 2 3 5 6 7 8 9 10 11 14
你能帮我写一个c代码来用c++实现这个吗?
这是冯诺依曼邻域问题,请有人用c++实现它。谢谢
Given a n*n matrix and a value k, how do we find all the neighbors for each element?
for example: in a 4*4
matrix, with k=2
say matrix is :
[ 1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16]
where these values are the indexes of the location, the neighbors for 1 are 1,2,3,5,6,9
. The values 3,6 and 9
come only because k =2 and wouldnt be there if k was = 1.
similarly the neighbors of 6 will be 1 2 3 5 6 7 8 9 10 11 and 14
Can you please help me to write a c code to implement this in c++.
It is the problem of von Neumann neighborhood, please can some one implement it in c++. Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的邻居将在您的目标元素周围形成菱形图案。菱形的点距目标元素有 k 跳。因此,顶部将向上 k 行,左侧将向上 k 列,依此类推。当您从一层到另一层时,菱形会均匀扩展。如果您从顶部点开始向下一行(更靠近目标节点),那么您将向每一侧输出 1。它在其他方向上是对称的。换句话说,邻居节点和目标节点之间的x坐标差加上y坐标差将≤k。
因此,只需创建两个嵌套的 for 循环来迭代此菱形即可。外循环遍历行,内循环遍历列。从顶部开始,然后在每次外循环迭代时将菱形扩展 1,直到到达与目标元素相同的行,然后收缩直到到达底部点。
显然,您需要测试离开矩阵的边界条件。
Your neighbors will form a diamond pattern around your target element. The points of the diamond will be k hops away from the target element. So the top will be k rows up, the left will be k columns over, etc. The diamond expands uniformly as you go from level to level. If you start at the top point and go one row down (closer to the target node) then you go out 1 to each side. It's symmetric in the other directions. In other words, the difference in x coordinates between a neighbor and the target node plus the difference in y will be <= k.
So just make two nested for loops that iterate over this diamond. Outer loop iterates over the rows, inner loop over the columns. Start at the top then expand the diamond by 1 at each outer loop iteration until you reach the same row as the target element, then contract until you reach the bottom point.
Obviously you'll need to test boundary conditions for going outside the matrix.
当 k=1 时,这应该可以解决问题。进行微小的更改以使其适用于所有 k
This should do the trick for k=1. Make minor changes to make it work for all k