如何查找二维数组是否唯一

时间:2019-06-04 12:47:24

标签: c#

我需要确定2d数组是否唯一 unique 表示 Sudoku规则(或Latin Square):每一列和每一行必须具有唯一值。 因此,以下不是被认为是唯一数组

int[,] matrix = new int[,] {
  {1, 2, 3},
  {2, 3, 1},
  {3, 2, 1},
};

由于最后一列3 1 1具有重复的1

我的if else语句应该是什么,这样我才能使bool true到2d数组是唯一的? 预先感谢

1 个答案:

答案 0 :(得分:1)

好的,那么。唯一表示每个 row column 都有唯一的值(“数独规则”)。让我们分析行和列(在HashSet<int>的帮助下):

  int[,] matrix = new int[,] {
    { 1, 2, 3 },
    { 2, 3, 1 },
    { 3, 2, 1 },
  };

  bool unique = true;

  HashSet<int> hs = new HashSet<int>();

  // Rows
  for (int r = 0; r < matrix.GetLength(0) && unique; ++r) {
    hs.Clear();

    for (int c = 0; c < matrix.GetLength(1) && unique; ++c)
      unique = hs.Add(matrix[r, c]));
  }

  // Columns
  for (int c = 0; c < matrix.GetLength(1) && unique; ++c) {
    hs.Clear();

    for (int r = 0; r < matrix.GetLength(0) && unique; ++r)
      unique = hs.Add(matrix[r, c]));
  }

  Console.WriteLine(unique ? "Unique" : "Not Unique");

结果:

  Not Unique

由于3 1 1列具有重复(非唯一)值(两个1