其实是网上那些土逼代码看不下去了,自己实现了一个。
但总隐约觉得应该有比这更简单的写法,高手何在……
#include <iostream>
#include <cstdio>
#include <cassert>
using namespace std;
//如果愿意, 也可以键盘输入再new一个
#define M 6
#define N 5
void print(int *a, int m, int n)
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
printf("%3d ", *(a+(i*n)+j));
}
puts("");
}
}
bool set(int*& p, int step, int& num, int max)
{
if(max == 0)
{
return false;
}
for(int i=0; i<max; i++)
{
p += step;//步长
*(p) = num++;
}
return true;
}
void init(int* p, int row, int col, int num, int n)
{
//right
if(!set(p, 1, num, col))
return;
//down
if(!set(p, n, num, --row))
return;
//left
if(!set(p, -1, num, --col))
return;
//up
if(!set(p, -n, num, --row))
return;
//next
init(p, row, --col, num, n);
}
init_round_arry(int* p, int row, int col, int nbegin)
{
assert(p != NULL);
--p;
init(p, row, col, nbegin, col);
}
int main()
{
int a[M*N] = {0};//世上本无二维数组
int begin = 0;
init_round_arry(a, M, N, begin);
print(a, M, N);
return 0;
}