Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 打印m x n大小的螺旋矩阵,O(1)空间复杂度从1到mn_Arrays_Algorithm_Matrix_Data Structures - Fatal编程技术网

Arrays 打印m x n大小的螺旋矩阵,O(1)空间复杂度从1到mn

Arrays 打印m x n大小的螺旋矩阵,O(1)空间复杂度从1到mn,arrays,algorithm,matrix,data-structures,Arrays,Algorithm,Matrix,Data Structures,我想打印一个m x n大小从1到m*n的螺旋矩阵。这应该通过O1存储实现,即打印时不存储。有可能实现吗? 当矩阵为nxn时我做了,但无法处理m*n 示例:m=4 n=3 输出: 1 2 3 10 11 4 9 12 5 8 7 6 当您尝试计算O1的空间复杂度时,下面的C代码可以做到这一点,尽管由于权衡,时间复杂度总是更差 #include<stdio.h> #include<stdlib.h> //Simulates filling the array in

我想打印一个m x n大小从1到m*n的螺旋矩阵。这应该通过O1存储实现,即打印时不存储。有可能实现吗? 当矩阵为nxn时我做了,但无法处理m*n

示例:m=4 n=3

输出:

1  2  3
10 11 4
9  12 5
8  7  6
当您尝试计算O1的空间复杂度时,下面的C代码可以做到这一点,尽管由于权衡,时间复杂度总是更差

#include<stdio.h>
#include<stdlib.h>
//Simulates filling the array in spiral fashion
//and finds the index we are currently in, and returns it.
int findVal(int x,int y,int m,int n)
{
    int i,j,val=1,start=0,end=n,top=0,bottom=m;
    while(val<=m*n)
    {
        for(i=start;i<end;i++)
        {
            if(top==x&&i==y)
            return val;
            val++;
        }
        for(i=top+1;i<bottom;i++)
        {
            if(i==x&&y==end-1)
            return val;
            val++;
        }
        for(i=end-2;i>=start;i--)
        {
            if(x==bottom-1&&y==i)
            return val;
            val++;
        }
        for(i=bottom-2;i>=top+1;i--)
        {
            if(x==i&&y==start)
            return val;
            val++;
        }
        start++;
        end--;
        top++;
        bottom--;
    }
    return -1;
}
int main()
{
    int m=4,n=3,i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%d\t",findVal(i,j,m,n));
        }
        printf("\n");
    }
    return 0;
}

希望这对你有所帮助。干杯:

对于n x n矩阵代码中n的所有位置,请检查您必须将m放在哪里。您可以分享您对nxn的尝试吗?