我给了一个数组Pairs[n][n]
。
如果Pairs[i][j]==true
这意味着块i和j可以形成一对。
我有找出我可以从给定数组形成的最大对,条件如下:
一个块可以配对零次或一次
你不能配对两个以上的块
我无法想到任何方法可以建议我如何处理这个问题的算法。
答案 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