// n阶螺旋方阵.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"
using namespace std;

//打函数印螺旋方阵的
void print(int n)
{

	int i, j, k;
	//定义i为行,j为列,k是一个额外空间
	i = j = 0;
	//从a[0][0开始
	int a[30][30];
	//开辟一个30*30的空间
	int count = 1;
	//count是计数,从一加到n*n
	int q = n;
	//海龟算法,以(1,0)为向右,一直右转
	//(1,0)->(0,-1)->(-1,0)->(0,1)

	//代换方式如下利用k,k = d;d = e;	e = -k;
	int d = 1;
	int e = 0;
  //定义开始方向向右
	
	//因为一阶为1,二阶为3,三阶为5,四阶为7;所以设置g=2n-1;外循环转这么多次
	for (int g=0; g< 2 * q - 1;g++)
	{
		for (int h=0; h < n;h++)
		{
			//然后第一次走n的距离,第二次n-1第三次n-1;第四次n-2,第五次n-2
			//故采用n每次减0.5的方法,控制走的距离
			a[i][j] = count;
			if (d == 1 && e == 0)
				j++;
			else if (d == 0 && e == -1)
				i++;
			else if (d == -1 && e == 0)
				j--;
			else
				i--;

			count++;
	
				
		}
		k = d;
		d = e;
		e = -k;
		//参上,改变方向
		n = n - 0.5;
		//参上,控制距离
	}


	//打印函数
		for (int x = 0; x < n; x++)
		{
			for (int y = 0; y < n; y++)
			{
				printf_s("%d", a[x][y]);
			}
			printf_s("\n");
		}
	}



int main()
{
	//主函数调用,9阶
	print(9);
	system("pause");
	return 0;

}