se + 1] = -1;
tofill[countBase + 1][0] = -1;
tofill[countBase + 1][_base + 1] = -1;
}
int direction = 0; // 0 means right, 1 means down, 2 means left, 3 means up
int initColumn = 1;
int initRow = 2;
tofill[1][1] = -1;
for(int count = 1; count < total; ++count)
{
switch(direction)
{
case 0:
if(tofill[initColumn][initRow + 1] != 0)
{
tofill[initColumn++][initRow] = count;
direction = 1;
}
else
{
tofill[initColumn][initRow++] = count;
}
break;
case 1:
if(tofill[initColumn + 1][initRow] != 0)
{
tofill[initColumn][initRow--] = count;
direction = 2;
}
else
{
tofill[initColumn++][initRow] = count;
}
break;
case 2:
if(tofill[initColumn][initRow - 1] != 0)
{
tofill[initColumn--][initRow] = count;
direction = 3;
}
else
{
tofill[initColumn][initRow--] = count;
}
break;
case 3:
if(tofill[initColumn - 1][initRow] != 0)
{
tofill[initColumn][initRow++] = count;
direction = 0;
}
else
{
tofill[initColumn--][initRow] = count;
}
break;
default:
break;
}
}
tofill[1][1] = 0;
// print array
for(int countColumn = 1, countRow = 1; (countColumn < _base + 1) && (countRow < _base + 2);)
{
if(tofill[countColumn][countRow] == -1)
{
cout< ++countColumn;
countRow = 1;
continue;
}
else
{
cout< }
}
}
int main()
{
for(int testNumber = 1; testNumber < 11; ++testNumber)
{
cout<<"Array while base number equals "< fill_and_print(testNumber);
cout< }
return 0;
}
测试数据为M从1到10,输出结果如下。
[cpp]
Array while base number equals 1:
0
Array while base number equals 2:
0 1
3 2
Array while base number equals 3:
0 1 2
7 8 3
6 5 4
Array while base number equals 4:
0 1 2 3
11 12 13 4
10 15 14 5
9 8 7 6
Array while base number equals 5:
0 1 2 3 4
15 16 17 18 5
14 23 24 19 6
13 22 21 20 7
12 11 10 9 8
Array while base number equals 6:
0 1 2 3 4 5
19 20 21 22 23 6
18 31 32 33 24 7
17 30 35 34 25 8
16 29 28 27 26 9
15 14 13 12 11 10
Array while base number equals 7:
0 1 2 3 4 5 6
23 24 25 26 27 28 7
22 39 40 41 42 29 8
21 38 47 48 43 30 9
20 37 46 45 44 31 10
19 36 35 34 33 32 11
18 17 16 15 14 13 12
Array while base number equals 8:
0 1 2 3 4 5 6 7
27 28 29 30 31 32 33 8
26 47 48 49 50 51 34 9
25 46 59 60 61 52 35 10
24 45 58 63 62 53 36 11
23 44 57 56 55 54 37 12
22 43 42 41 40 39 38 13
21 20 19 18 17 16 15 14
Array while base number equals 9:
0 1 2 3 4 5 6 7 8
31 32 33 34 35 36 37 38 9
30 55 56 57 58 59 60