Random slot algorithm

后端 未结 4 1510
执念已碎
执念已碎 2020-11-27 08:35

I have two dimensional array. I want to pick a slot at random, and continue to do so never picking the same slot twice until I have finally picked all slots (so nothing ran

4条回答
  •  我在风中等你
    2020-11-27 09:13

    Using the Fisher-Yates shuffle algorithm as mentioned before (in O(n) time)

    int X = 3;  int Y = 4;
    int[] array = new int[X * Y];
    
    for (int i = 0; i < array.Length; i++) array[i] = i;
    FisherYatesShuffle(array);
    
    var randomSlots = array.Select((i,j) => new {x=array[j]%X , y=array[j]/X })
                           .ToArray();
    

    public static void FisherYatesShuffle(T[] array)
    {
        Random r = new Random();
        for (int i = array.Length - 1; i > 0; i--)
        {
            int j = r.Next(0, i + 1);
            T temp = array[j];
            array[j] = array[i];
            array[i] = temp;
        }
    }
    

提交回复
热议问题