如何在二维矩阵中不是按行或按列遍历而是对角填充所有坐标

问题描述 投票:0回答:1

enter image description here

我试图解决一个

dp
问题,并在制表过程中遇到了麻烦,因为通过正常方法,该矩阵将按行或按列填充,但我需要对角线的值,而不是按行或按列。你能为此提供一个合适的 for 循环吗?

c loops matrix dynamic-programming
1个回答
0
投票

看起来没那么难。从 0,0 开始执行第一个,然后向右移动,直到剩下任何一个并执行该操作,然后从 0,0 向下移动并从那里开始,然后这样做,直到完成为止。

– 500 - 内部服务器错误


外循环:应该有5次迭代

for (int a = 0; a < 5; a++)

内循环:迭代次数可变;我们用 x 来表示它。那么 x 应该依赖于这样的:

a = 0: x = 5

a = 1: x = 4

...

a = 4: x = 1

很容易看出a + x 是常数,所以x = 5 - a。内循环:

for (a = 0; a < 5; a++)
    for (b = 0; b < 5 - a; b++)

现在用 (x,y) 表示第一个访问元素的坐标。

for (a = 0; a < 5; a++)
{
    x = ...
    y = ...
    for (b = 0; b < 5 - a; b++)
    {
    }
}

尝试看看 (x,y) 如何依赖于 a。应该很简单。现在请注意如何在内循环内推进 (x,y)。

for (a = 0; a < 5; a++)
{
    x = ...
    y = ...
    for (b = 0; b < 5 - a; b++)
    {
        // do stuff with element at (x,y)
        // then advance x and y
        ++x;
        ++y;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.