C++查找二维数组中两点之间的距离

标签 c++ arrays string vector char

我现在正在处理继承,对此我没有任何问题。 我有这个字符串 vector (基本上是一个二维字符数组)。

确切的中间是鲨鱼所在的位置和鲨鱼的性格 根据其他鱼的位置而变化。

例如

.....
.....
^.l..
.....
.....

箭头是鱼所在的位置,因为鱼在左边。鲨鱼变成了'l'

.>...
.....
..u..
.....
.....

箭头是鱼所在的位置,因为鱼是向上的。鲨鱼变成了'u'

我必须正确执行此操作的代码是:

void Shark::point(std::vector<std::string>& map){

if (map[0][0] != '.' || map[1][0] != '.' || map[2][0] != '.' || map[3][0] != '.' || map[4][0] != '.' || map[1][1] != '.' || map[2][1] != '.' || map[3][1] != '.'){
ProtoFish::m_direction = Direction::left;
}
if (map[0][1] != '.' || map[0][2] != '.' || map[0][3] != '.' || map[1][2] != '.'){
ProtoFish::m_direction = Direction::up;
}
if (map[4][1] != '.' || map[4][2] != '.' || map[4][3] != '.' || map[3][2] != '.'){
ProtoFish::m_direction = Direction::down;
}
if (map[0][4] != '.' || map[1][4] != '.' || map[2][4] != '.' || map[3][4] != '.' || map[4][4] != '.' || map[1][3] != '.' || map[2][3] != '.' || map[3][3] != '.'){
ProtoFish::m_direction = Direction::right;
}
}

我基本上只是检查这张 map 中是否有鱼:

    l u u u r
    l l u r r
    l l . r r
    l l d r r
    l d d d r

如果 '.' 在哪里鱼所在的地方不存在 char,因此鲨鱼应该指向那个方向。

问题出现在多条鱼的地方。

>....
..>..
..*..
.>...
..^>.

我知道我应该做什么,但我不知道如何去做,甚至不知道如何开始。目标只是让鲨鱼面向最近的鱼的同一方向。所以基本上箭头“最靠近”中间。 有人可以帮我开始吗? 也许像一个单独的函数来计算每个元素到中心的距离?

最佳答案

您需要计算每条鱼的距离 - 为此,您需要将鱼的位置转换为 (x,y) 坐标。鲨鱼所在的位置是 (0,0) 坐标。

.....
.....
^.l..
.....
.....

would be (-2,0) for the fish ^

.>...
.....
..u..
.....
.....

would be (-1,3) for the fish >

所以这种从 2D 的坐标转换很容易做到。 对于你在二维中使用毕达哥拉斯定理的距离 - 在这种情况下它只是 x坐标的平方+y坐标的平方的平方根。 然后您需要另一个新数组来存储每条鱼的距离。 然后您需要在新的距离数组中搜索最小值,其中 数组的索引是鱼索引(如鱼的 id)。 这将为您提供离鲨鱼最近的鱼,因此如果只有一只拳头,您就可以让鲨鱼面向正确的方向。 但是,如果有不止一条距离相同的鱼,您需要在这种情况下考虑一个新规则(例如,如果左边的鱼多于右边的鱼并且左右鱼距离相同) -然后向左看是因为有更多的鱼?-或鲨鱼食物-是一个建议)。

关于C++查找二维数组中两点之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40431717/

相关文章:

c++ - Linux 上最快的截屏方法

python - 如何计算 Numpy 数组中每个零左边的零个数

python - numpy 掩码数组的奇怪行为

java - 如何使 TextView 中的一个单词与字符串中的长文本可单击?

编译时的 C# 连接字符串

c++ - string1 == string2和您自己的for循环比较之间有什么区别?

c++ - 在 C++20 中迭代结构的成员

c++ - 如何释放 V8 占用的内存?

javascript - 基于 "Date"的数据的数据结构

c - C语言中反转字符串的TCP程序给出一半的结果