Спиральная матрица в C ++?

У меня есть программа, где я должен заполнить матрицу a [n] [n] числами от 1 до n в виде спирали. Однако моя программа заполняет только границы матрицы. У меня вопрос, как я могу оптимизировать алгоритм так, чтобы он заполнил весь 2d-массив.

#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;
}
}

0

Решение

Есть несколько вещей, которые необходимо настроить:

  • Вам нужен еще один цикл вокруг того, что у вас уже есть, который повторяет движение вашего круга для каждого раунда спирали и уменьшает размер круга с каждой итерацией (это m в моем примере, который сводится к нулю).
  • Вы инициализируете int i а также int j в начале вашей основной функции, но в циклах, которые вы используете for (int i=0;...) Это означает, что вы не используете значения ранее определенных целых чисел.

В итоге это выглядит так:

#include <iostream>

using namespace std;
void print();
const int n=6;
int a[n][n];
int main()
{
int counter = 1;
for (int m = n; m > 0; m--)
{
int j=n-m,i=0;
for(i=n-m; i<m; i++)
{
a[i][j]=counter;
counter++;
}
counter--;
for(int k=n-m; k<m; k++)
{
a[m-1][k]=counter;
counter++;
}
counter--;
for(i=m-1; i>=n-m; i--)
{
a[i][m-1]=counter;
counter++;
}
counter--;
for(j=m-1; j>n-m; j--)
{
a[n-m][j]=counter;
counter++;
}
}
print();
return 0;
}

Используя ваш print() это дает:

1       20      19      18      17      16
2       21      32      31      30      15
3       22      33      36      29      14
4       23      34      35      28      13
5       24      25      26      27      12
6       7       8       9       10      11

Обратите внимание, что я выбрал n=6 Вот.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]