【发布时间】:2018-01-31 17:27:26
【问题描述】:
我有一个程序,我必须用从 1 到 n 的数字以螺旋形式填充矩阵 a[n][n]。但是我的程序只填充矩阵的边界。我的问题是如何优化算法以使其填充整个二维数组。
#include <iostream>
using namespace std;
void print();
const int n=9;
int a[n][n];
int main()
{
int counter=1,j=0,i=0;
for(int i=0; i<n; i++)
{
a[i][j]=counter;
counter++;
}
counter--;
for(int k=0; k<n; k++)
{
a[n-1][k]=counter;
counter++;
}
counter--;
for(int i=n-1; i>=0; i--)
{
a[i][n-1]=counter;
counter++;
}
counter--;
for(int j=n-1; j>0; j--)
{
a[i][j]=counter;
counter++;
}
print();
return 0;
}
void print ()
{
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
cout<<a[i][j]<<'\t';
}
cout<<endl;
}
}
【问题讨论】:
-
如您所写,您需要 4 个循环,一个用于向左走,一个用于向下,一个用于向右走,一个用于再次向上。但是,您需要跟踪您需要去的地方。例如。第一次向左走,从 0 到 n-1,第二次只从 1 到 n-2,依此类推。我相信你可以做到。