У меня есть двумерный массив целых чисел. В данном массиве есть точка входа [0,0] , а так же точка выхода [Length-1,Length-1]. (Это квадрат, матрица, если можно так назвать).
Мне нужно сгенерировать случайный путь с точки входа в точку выхода и заполнить этот путь числом 98. (Прошу заметить, не самый короткий, а просто случайный). Подкиньте идею, как реализовать.
Если нет никаких ограничений на то, в какой мере путь может пересекать или накладываться на себя, случайный путь - это просто набор случайных точек. Напишем код для заполнения линии между двумя точками:
public class Map
{
int[,] cells;
public Map(int size)
{
cells = new int[size, size];
}
//заполнение прямой между двумя точками заданным числом
public void FillLine(int x1, int y1, int x2, int y2, int value)
{
int x = x1, y = y1;
int dx = Math.Sign(x2 - x1); //приращение по X
int dy = Math.Sign(y2 - y1); //приращение по Y
bool direction_y = false;
while (true)
{
cells[x, y] = value;
if (x == x2 && y == y2) break; //достигнута конечная точка
//сделаем по очереди приращение по X или Y
if (direction_y)
{
if (y != y2) y += dy;
}
else
{
if (x != x2) x += dx;
}
direction_y = !direction_y;
}
}
public override string ToString()
{
StringBuilder sb = new StringBuilder(500);
for (int y = 0; y < cells.GetLength(0); y++)
{
for (int x = 0; x < cells.GetLength(0); x++)
{
sb.AppendFormat("{0} ",cells[x,y].ToString().PadLeft(2));
}
sb.AppendLine();
}
return sb.ToString();
}
}
Тогда заполнение случайного пути будет выглядеть так:
const int SIZE = 30;
const int N = 4;
Map m = new Map(SIZE);
Random rnd = new Random();
int x0=0,y0=0,x, y;
int value = 1;
//проходим через N случайных точек
for (int i = 0; i < N; i++)
{
x = rnd.Next(SIZE-1);
y = rnd.Next(SIZE-1);
m.FillLine(x0, y0, x, y,value);
x0 = x;
y0 = y;
}
//заходим в конец
x = SIZE - 1;
y = SIZE - 1;
m.FillLine(x0, y0, x, y, value);
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Подскажите, как можно нарисовать в конце кривой Безье стрелку? Есть множество примеров как это сделать для прямой линии (1 , 2 , 3), но именно...
Надо поменять в 4 местах hex значение в большом файле 6 gb Использую этот код
Подскажите, как запустить анимацию пушки во время выстрела ядра из нее? Создание и выстрел ядра у меня происходит в методе Shoot()Не понимаю...