从给定数组中查找最大对

时间:2015-04-11 16:11:24

标签: algorithm

我给了一个数组Pairs[n][n]

如果Pairs[i][j]==true这意味着块i和j可以形成一对。

我有找出我可以从给定数组形成的最大对,条件如下:
一个块可以配对零次或一次 你不能配对两个以上的块 我无法想到任何方法可以建议我如何处理这个问题的算法。

2 个答案:

答案 0 :(得分:0)

检查一下。

        int n = 10;
        bool[,] array = new bool[n, n];

        List<Tuple<int, int>> pairs = new List<Tuple<int, int>>();

        for (int row = 0; row < array.GetLength(0); row++)
        {
            for (int col = 0; col < array.GetLength(1); col++)
            {
                if (array[row, col] == true)
                {
                    pairs.Add(new Tuple<int, int>(row, col));
                }
            }
        }

        // Prints the combinations
        foreach (var pair in pairs)
        {
            Console.WriteLine("{0} : {1}", pair.Item1, pair.Item2);
        }

答案 1 :(得分:0)

您的数组表示图形,Pairs[i][j]==true表示第i个和第j个顶点之间的边。

因此一般图表的问题是maximum matching,可能的方法是Edmonds's matching algorithm