Как использовать структуру для покрытия всех целых чисел в 2-м массиве? - PullRequest
0 голосов
/ 06 мая 2020

это мой первый пост. Я сейчас прохожу курс программирования, и мое текущее задание - создать целое число (назовем его муравьем), которое будет перемещаться ко всем целым числам в 2-м массиве (случайный путь). Вот мой код на данный момент:


namespace Ant
{
    class Program
    {
        static void Main(string[] args)
        {
            int ant;
            int i = 0;
            int[,] numberGrid =
            {
                {1, 2},
                {3, 4},
                {5, 6},
                {7, 8},
                {9, 10},
                {10, 11},
                {11, 12},
                {13, 14},
                {15, 16},
                {17, 18},
                {19, 20},
            };
            do
            {

                Random rand = new Random();
                ant= rand.Next(numberGrid[10, 1]);
                Console.WriteLine(ant);
                i++;
            } while (i !=110);
            Console.WriteLine("It took {0} steps for the ant to cover all spaces!", i);
        }
    }
}

У меня есть 2d-массив, и я временно настроил муравья для рандомизированного пути, который будет go включаться 110 раз, прежде чем он остановится. Я должен интегрировать структуру в это, чтобы муравей был только go, пока он не посетил все целые числа 2-го массива вместо установленного количества раз, но я абсолютно не понимаю, как я должен сделать это. Если бы кто-нибудь мог помочь мне понять это, было бы здорово, спасибо!

1 Ответ

0 голосов
/ 06 мая 2020

Без более подробной информации о том, как вы этого ожидаете, похоже, что вам нужно сделать Ant структурой и записать, где Ant был (или не был). Вот способ, которым вы могли бы это сделать, хотя я уверен, что с точки зрения производительности есть способ лучше:

static void Main(string[] args)
{
    var unvisitedSpaces = new List<Coordinates>
    {
        //I've used your numbers but should this be a full matrix i.e. [1,1], [1,2], [1,3] etc.?
        new Coordinates(1, 2),
        new Coordinates(3, 4),
        new Coordinates(5, 6),
        new Coordinates(7, 8),
        new Coordinates(9, 10),
        new Coordinates(11, 12),
        new Coordinates(13, 14),
        new Coordinates(15, 16),
        new Coordinates(17, 18),
        new Coordinates(19, 20) 
    };

    var ant = new Ant();
    int counter = 0;
    var r = new Random();
    var min = Math.Min(unvisitedSpaces.Min(x => x.X), unvisitedSpaces.Min(y => y.Y));
    var max = Math.Max(unvisitedSpaces.Max(x => x.X), unvisitedSpaces.Max(y => y.Y)) + 1;

    do
    {
        ant.X = r.Next(min, max);
        ant.Y = r.Next(min, max);
        counter++;

        //check if the ant hasn't visited this space by checking the unvisitedSpaces list.
        if (unvisitedSpaces.Any(c => c.X == ant.X && c.Y == ant.Y))
        {
            //if it hasn't visited (the list contains that set of coordinates) then remove it from the list as it's now visited it.
            var coord = unvisitedSpaces.FirstOrDefault(c => c.X == ant.X && c.Y == ant.Y);
            unvisitedSpaces.Remove(coord);
        }
    } while (unvisitedSpaces.Count() > 0);

    Console.WriteLine("It took {0} steps for the ant to cover all spaces!", counter);
    Console.ReadLine();
}

public struct Coordinates
{
    public int X { get; }
    public int Y { get; }

    public Coordinates(int x, int y)
    {
        X = x;
        Y = y;
    }
}

public struct Ant
{
    public int X { get; set; }
    public int Y { get; set; }
}

Результат: enter image description here

ОБНОВЛЕНИЕ

Добавлена ​​возможность автоматически настраивать максимальные и минимальные значения, которые будут использоваться «случайным» путем получения их из матрицы координат. Поэтому любые корректировки матрицы следует включать в поля, которые посещает «Муравей».

...