状态是从0到4的随机整数的列表。示例= [1, 0, 2, 3, 2]
。邻居被描述为列表中整数之一的变化。例如,[0, 0, 2, 3, 2]
是[1, 0, 2, 3, 2]
的邻居。我如何找到给定状态的所有可能邻居?
答案 0 :(得分:0)
您可以使用公式n^r
查找序列的排列总数,其中n
是您使用的数字数,r
是序列中的元素数。您的情况是5^5
。 You can read more about this and see all the possible permutations here.
从列表中,您可以根据我们刚刚计算出的内容进行创建,您可以确定这些排列中的哪些是邻居,并对所遇到的每个排列进行计数。您可以使用for循环(for each permutation, check if it's a neighbor)
。
我添加了一个名为isNeighbor的方法,该方法根据情况返回true或false。尽管这是在Java中,但我使用的相同原理也适用于python。希望您仍然能够按照我提供的评论进行操作。如果没有,我可以尝试进一步解释。
int[] cell = {1,0,2,3,1};
int[] cell = {0,0,2,3,1}; //example cells (stored as array of integers)
static boolean isNeighbor(int[] cell, int [] cell2)
{
int count = 0;
for(int i = 0; i < cell.length;i++) //for each number in array
if(!(cell[i] == cell2[i])) //if the number at the same index isn't the same
if(Math.abs(cell[i] - cell2[i]) != 1) //if the difference isn't 1
count+=2;
else
count++;
if(count > 1)
return false; // is not a neighbor
else
return true; // is a neighbor
}
如果您需要有关此方法的任何说明,或者从此处出发,请随时提出疑问! :)