private static int[][] solve(int boardHeigth, int boardWidth, int[][] figurePositions, int[][] fruitPositions)
{
bool[] destroyed = new bool[fruitPositions.Length];
int numOfFruits = fruitPositions.Length;
for (int i = 0; i < destroyed.Length; i++)
destroyed[ i] = false;
List<int> moving = new List<int>();
while (numOfFruits > 0)
{
int d2, k = (~0) >> 1, minD2 = (~0) >> 1;
for (int i = 0; i < fruitPositions.Length; i++)
{
d2 = (figurePositions[0][0] - fruitPositions[ i][0])
* (figurePositions[0][0] - fruitPositions[ i][0])
+ (figurePositions[0][1] - fruitPositions[ i][1])
* (figurePositions[0][1] - fruitPositions[ i][1]);
if (d2 < minD2 && destroyed[ i] == false)
{
minD2 = d2;
k = i;
}
}
while (figurePositions[0][0] != fruitPositions[k][0]
|| figurePositions[0][1] != fruitPositions[k][1])
{
if (figurePositions[0][0] < fruitPositions[k][0])
{
figurePositions[0][0]++;
moving.Add(figurePositions[0][0]);
moving.Add(figurePositions[0][1]);
}
if (figurePositions[0][0] > fruitPositions[k][0])
{
figurePositions[0][0]--;
moving.Add(figurePositions[0][0]);
moving.Add(figurePositions[0][1]);
}
if (figurePositions[0][1] < fruitPositions[k][1])
{
figurePositions[0][1]++;
moving.Add(figurePositions[0][0]);
moving.Add(figurePositions[0][1]);
}
if (figurePositions[0][1] > fruitPositions[k][1])
{
figurePositions[0][1]--;
moving.Add(figurePositions[0][0]);
moving.Add(figurePositions[0][1]);
}
}
destroyed[k] = true;
numOfFruits--;
}
int[][] moves = new int[moving.Count/2][];
for (int i = 0; i < moving.Count; i+=2)
{
moves[ i / 2] = new int[2];
moves[ i / 2][0] = moving[ i];
moves[ i / 2][1] = moving[ i+1];
}
return (moves);
}