C ++在2D数组中找到两点之间的距离

时间:2016-11-04 21:07:21

标签: c++ arrays string vector char

我正在使用继承,我没有问题。 我有这个字符串向量(基本上是char的2D数组)。

确切的中间是鲨鱼的位置和鲨鱼的特征 根据其他鱼的位置而变化。

例如

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

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

.>...
.....
..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;
}
}

我基本上只是检查鱼是否在这张地图中:

    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不存在于鱼的位置,所以鲨鱼应指向那个方向。

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

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

我明白我应该做什么,但我不知道该怎么做,或者如何开始。目标只是让鲨鱼面向最近鱼的方向。所以基本上箭头“最接近”中间。 有人可以帮助我开始这个吗? 也许是一个单独的函数来计算每个元素与中心的距离?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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