我想浏览像这样的矩阵:
我想浏览第一行,获取最小的数字,然后浏览与先前最小数字匹配的行。
Ex:我浏览A行:我浏览单元格A,A,我得到0.我不保留它(因为它是0)我浏览单元格A,D我得到5.我保留它。我浏览单元格A,G我得到8但是我不保留它因为它优于5.我浏览单元格A,K然后我得到4我保留它(< 5)。
目前没关系,一个简单的循环足以做到这一点。然后我想浏览行K,如果可能的话,不要浏览单元格K,A因为我在浏览A行时已经浏览了它。
答案 0 :(得分:0)
你需要循环通过矩阵的上半部分/下半部分吗?我假设矩阵是一个int数组的数组。
var matrix = new int[][]{ ... };
int smallest = 0;
for(int i = 0; i < matrix.Length; i++)
{
for(int j = 0; j < matrix.Length; j++)
{
int number = matrix[i][j];
if (number != 0 && number < smallest)
smallest = number;
}
}
虽然,我还没有完成
然后浏览与先前最小数字匹配的行
一部分。
答案 1 :(得分:0)
我找到了解决方案:
private static IEnumerable<int> ComputeMatrix(int[,] matrix)
{
// check args
if (matrix.Rank != 2) { throw new ArgumentException("matrix should have a rank of 2"); }
if (matrix.GetUpperBound(0) != matrix.GetUpperBound(1)) { throw new ArgumentException("matrix should have the same size");}
// indice treated
List<int> treatedIndex = new List<int>();
for (int i = 0; i <= matrix.GetUpperBound(0); i++)
{
if (treatedIndex.Count == matrix.GetUpperBound(0))
break;
// distance minimum between 2 points
int distanceMin = Int32.MaxValue;
// next iteration of index
int nextI = i;
// add the index to ignore in the next iteration
int nextJ = -1;
for (int j = 0; j <= matrix.GetUpperBound(1); j++)
{
if (treatedIndex.IndexOf(j) == -1)
{
if (matrix[i, j] != 0 && matrix[i, j] < distanceMin)
{
distanceMin = matrix[i, j];
nextI = j;
nextJ = i;
}
}
}
i = nextI - 1;
treatedIndex.Add(nextJ);
yield return distanceMin;
}
}