【发布时间】:2017-08-29 01:46:19
【问题描述】:
我正在尝试解决一个问题,该问题涉及矩阵元素的螺旋排序以及如何计算相应的行和列。
所有查询的格式为SZ P,其中SZ是矩阵的大小,P是从中心开始到右上角的螺旋位置。
输出必须是螺旋中 P 点的笛卡尔坐标(行和列)(从底部的第 1 行和左侧的第 1 列开始)。
我为解决这个问题所做的,是以相反的方式进行,从右上角开始一直到中心):
while(k <= SZ && l <= SZ && m > 0 && n > 0)
{
right:
for(int i = k; i <= m; ++i) /// right
{
a[i][m] = no;
--no;
}
--m;
down:
for(int i = m; i >= k; --i) /// down
{
a[n][i] = no;
--no;
}
--n;
left:
for(int i = n; i >= k; --i) /// left
{
a[i][k] = no;
--no;
}
++k;
up:
for(int i = k; i <= m; ++i) /// up
{
a[l][i] = no;
no--;
}
++l;
///where l,k,n,m are:
/// k start row index
/// n end row index
/// l start column index
/// m end column index
}
代码在 3x3 矩阵上运行良好,它输出这个矩阵:
3 2 9 4 1 8 5 6 7
所以,我现在想知道的是如何在不将矩阵存储在内存中的情况下找到矩阵中点 P 的笛卡尔坐标,因为大小限制为 100000。
示例输入:
3 1 3 3 3 9 5 9 5 10示例输出:
行 = 2,列 = 2。 行 = 3,列 = 1。 行 = 3,列 = 3。 行 = 4,列 = 4。 行 = 5,列 = 4。
【问题讨论】:
-
你还没有定义你所说的“交叉”这个词是什么意思(不知道用在这里是否正确?)你的意思是检索第N个点的坐标在螺旋上?
-
@meowgoesthedog crossing = 以我从 1 到 9 绘制矩阵的方式遍历矩阵,但我反其道而行之,因为我发现它更容易。不,我的意思是找到螺旋的 P(给定点)。