数据结构课本第六章实验题3:求n*n阶螺旋方阵

目的:掌握数组算法设计。

内容:以下是一个5*5阶螺旋方阵,编写一个程序exp6-3.cpp输出该形式的n*n(n<10)阶方阵(按照顺时针方向旋进)。

  1   2   3  4   5

16 17 18 19  6

15 24 25 20  7

14 23 22 21  8

13 12 11 10  9

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int a[100][100];
void build(int n)//螺旋化
{
    int i=0,j=0,k,o=1;//i和j是数组下标,o计数
    for(k=0;k<(n+1)/2;k++)
    {
        while(a[i][j]==-1&&j<n)
            a[i][j++]=o++;
        j--,i++;
        while(a[i][j]==-1&&i<n)
            a[i++][j]=o++;
        i--,j--;
        while(a[i][j]==-1&&j>=0)
            a[i][j--]=o++;
        j++,i--;
        while(a[i][j]==-1&&i>=0)
            a[i--][j]=o++;
        i++,j++;
    }
}
void print(int n)//输出操作完后的数组
{
    int i,j;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            if(j<n-1)
                printf("%2d ",a[i][j]);
            else
                printf("%2d\n",a[i][j]);
}
int main()
{
    int n;
    while(cin>>n)//输入n
    {
        memset(a,-1,sizeof a);//初始化
        build(n);
        print(n);
    }
    return 0;
}

运行结果:

猜你喜欢

转载自blog.csdn.net/qq_15742375/article/details/84280768