对于我的大学过程,我正在模拟一个称为随机顺序吸附的过程。我必须做的一件事是将正方形(不能重叠)随机放置到格子上,直到没有更多空间为止,重复该过程几次以找到平均“干扰”覆盖率。
基本上我正在对大量整数执行操作,其中存在 3 个可能的值:0、1 和 2。标有“0”的站点是空的,标有“1”的站点是满的。最初,数组定义如下:
int i, j;
int n = 1000000000;
int array[n][n];
for(j = 0; j < n; j++)
{
for(i = 0; i < n; i++)
{
array[i][j] = 0;
}
}
假设我想在数组上随机放置 5*5 个正方形(不能重叠),以便正方形用 '1' 表示。这可以通过随机选择 x 和 y 坐标然后创建一个 5*5 的 '1' 正方形来完成,正方形的左上角从该点开始。然后我会将广场附近的地点标记为“2”。这些代表不可用的站点,因为在这些站点上放置一个正方形会导致它与现有的正方形重叠。此过程将继续进行,直到没有更多空间可以在阵列上放置方格(基本上,阵列上不再有 '0')
总之,说到点子上了。我想通过使用按位运算使这个过程尽可能高效。如果我不必在广场附近标记站点,这将很容易。我想知道是否可以创建一个 2 位数字,以便我可以考虑标有“2”的站点。
抱歉,如果这听起来很复杂,我只是想解释一下我为什么要这样做。