如何使用 struct 覆盖二维数组中的所有整数?
Posted
技术标签:
【中文标题】如何使用 struct 覆盖二维数组中的所有整数?【英文标题】:How to use struct to cover all integers in 2d array? 【发布时间】:2020-08-21 00:25:39 【问题描述】:这是我的第一篇文章。 我现在正在学习编程课程,我目前的任务是创建一个整数(我们称之为蚂蚁),它将移动到二维数组(随机路径)中的所有整数。到目前为止,这是我的代码:
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 数组,我暂时将 ant 设置为随机路径,该路径将在停止之前持续 110 次。我应该将 struct 集成到其中,这样蚂蚁只会在它访问了 2d 数组的所有整数而不是一定次数之前才会去,但我完全不知道我应该怎么做这。如果有人能帮助我理解,那就太好了,谢谢!
【问题讨论】:
你想让ant执行110步吗?目前,您的代码仅在地图的 (not even) 随机单元格处生成 ant 110 次。或者这个数组到底是什么?可以用函数代替。 听起来你应该创建一个名为“Ant”的结构来存储 x 和 y 坐标,而不是像你所做的那样创建一个 int。就空间而言,一旦访问过它们,您就可以简单地从列表或其他东西中删除坐标,因此您只剩下未访问过的空间。一旦该列表为空,您就已经全部访问过了。您可以将该逻辑包装在一个while循环或其他东西中。 【参考方案1】:如果没有更多关于您期望如何执行此操作的详细信息,听起来您需要将 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;
结果:
更新
添加了通过从坐标矩阵中获取它们来自动调整“随机”使用的最大值和最小值的功能。因此,对矩阵的任何调整都应包含在“蚂蚁”访问的空间中。
【讨论】:
好的,谢谢!这正是我所要求的。我也调整了坐标,所以我有 [1, 1], [1, 2].. 等一直到 [1, 30]。它完全按照需要工作,如果没有您的帮助,我将无法做到。 @Anthony - 如果您已将矩阵增加到 30,请确保将最大随机数增加到 31。更好的是,将随机数中使用的值设置为从列表中的最小值和最大值检索以上是关于如何使用 struct 覆盖二维数组中的所有整数?的主要内容,如果未能解决你的问题,请参考以下文章