//數字的蛇形輸出
#include <iostream>
#define LEN 10
using namespace std;
typedef struct direct{
int x;
int y;
}direct;
enum mycase {_right, _left_down, _down, _right_up};
direct d[4] = {{0, 1}, {1, -1}, {1, 0}, {-1, 1}};
int main() {
int a[LEN][LEN];
int i, j, x, y, k, n, l;
n = 0;
x = 0;
y = 0;
for(i = 0, n = 0; i < LEN; i++) {
for(j = 0; j < LEN; j++) {
a[i][j] = -1;
}
}
for(l = 1; l < 50; l++) {
cout << "____________________________" << endl;
n = 0;
x = 0;
y = 0;
for(i = l; i >= 1;) {
for(j = 0; i >= 1 && j < 4; j++) {
switch(j) {
case _right:
a[x][y] = i--;
x += d[j].x;
y += d[j].y;
break;
case _left_down:
for(n++, k = 0; i >= 1 && k < n; k++) {
a[x][y] = i--;
x += d[j].x;
y += d[j].y;
}
break;
case _down:
a[x][y] = i--;
x += d[j].x;
y += d[j].y;
break;
case _right_up:
for(n++, k = 0; i >= 1 && k < n; k++) {
a[x][y] = i--;
x += d[j].x;
y += d[j].y;
}
break;
}
}
}
for(i = 0; i < LEN; i++) {
if(a[i][0] == -1) {
break;
}
for(j = 0; j < LEN; j++) {
if(a[i][j] == -1) {
break;
}
cout << a[i][j] << " ";
}
cout << endl;
}
}
}
/*
____________________________
1
____________________________
2 1
____________________________
3 2
1
____________________________
4 3
2
1
____________________________
5 4
3 1
2
____________________________
6 5 1
4 2
3
____________________________
7 6 2 1
5 3
4
____________________________
8 7 3 2
6 4 1
5
____________________________
9 8 4 3
7 5 2
6 1
____________________________
10 9 5 4
8 6 3
7 2
1
____________________________
11 10 6 5
9 7 4
8 3
2
1
____________________________
12 11 7 6
10 8 5
9 4
3 1
2
____________________________
13 12 8 7
11 9 6
10 5 1
4 2
3
____________________________
14 13 9 8
12 10 7 1
11 6 2
5 3
4
____________________________
15 14 10 9 1
13 11 8 2
12 7 3
6 4
5
____________________________
16 15 11 10 2 1
14 12 9 3
13 8 4
7 5
6
____________________________
17 16 12 11 3 2
15 13 10 4 1
14 9 5
8 6
7
____________________________
18 17 13 12 4 3
16 14 11 5 2
15 10 6 1
9 7
8
____________________________
19 18 14 13 5 4
17 15 12 6 3
16 11 7 2
10 8 1
9
____________________________
20 19 15 14 6 5
18 16 13 7 4
17 12 8 3
11 9 2
10 1
____________________________
21 20 16 15 7 6
19 17 14 8 5
18 13 9 4
12 10 3
11 2
1
____________________________
22 21 17 16 8 7
20 18 15 9 6
19 14 10 5
13 11 4
12 3
2
1
____________________________
23 22 18 17 9 8
21 19 16 10 7
20 15 11 6
14 12 5
13 4
3 1
2
____________________________
24 23 19 18 10 9
22 20 17 11 8
21 16 12 7
15 13 6
14 5 1
4 2
3
____________________________
25 24 20 19 11 10
23 21 18 12 9
22 17 13 8
16 14 7 1
15 6 2
5 3
4
____________________________
26 25 21 20 12 11
24 22 19 13 10
23 18 14 9 1
17 15 8 2
16 7 3
6 4
5
____________________________
27 26 22 21 13 12
25 23 20 14 11 1
24 19 15 10 2
18 16 9 3
17 8 4
7 5
6
____________________________
28 27 23 22 14 13 1
26 24 21 15 12 2
25 20 16 11 3
19 17 10 4
18 9 5
8 6
7
____________________________
29 28 24 23 15 14 2 1
27 25 22 16 13 3
26 21 17 12 4
20 18 11 5
19 10 6
9 7
8
____________________________
30 29 25 24 16 15 3 2
28 26 23 17 14 4 1
27 22 18 13 5
21 19 12 6
20 11 7
10 8
9
____________________________
31 30 26 25 17 16 4 3
29 27 24 18 15 5 2
28 23 19 14 6 1
22 20 13 7
21 12 8
11 9
10
____________________________
32 31 27 26 18 17 5 4
30 28 25 19 16 6 3
29 24 20 15 7 2
23 21 14 8 1
22 13 9
12 10
11
____________________________
33 32 28 27 19 18 6 5
31 29 26 20 17 7 4
30 25 21 16 8 3
24 22 15 9 2
23 14 10 1
13 11
12
____________________________
34 33 29 28 20 19 7 6
32 30 27 21 18 8 5
31 26 22 17 9 4
25 23 16 10 3
24 15 11 2
14 12 1
13
____________________________
35 34 30 29 21 20 8 7
33 31 28 22 19 9 6
32 27 23 18 10 5
26 24 17 11 4
25 16 12 3
15 13 2
14 1
____________________________
36 35 31 30 22 21 9 8
34 32 29 23 20 10 7
33 28 24 19 11 6
27 25 18 12 5
26 17 13 4
16 14 3
15 2
1
____________________________
37 36 32 31 23 22 10 9
35 33 30 24 21 11 8
34 29 25 20 12 7
28 26 19 13 6
27 18 14 5
17 15 4
16 3
2
1
____________________________
38 37 33 32 24 23 11 10
36 34 31 25 22 12 9
35 30 26 21 13 8
29 27 20 14 7
28 19 15 6
18 16 5
17 4
3 1
2
____________________________
39 38 34 33 25 24 12 11
37 35 32 26 23 13 10
36 31 27 22 14 9
30 28 21 15 8
29 20 16 7
19 17 6
18 5 1
4 2
3
____________________________
40 39 35 34 26 25 13 12
38 36 33 27 24 14 11
37 32 28 23 15 10
31 29 22 16 9
30 21 17 8
20 18 7 1
19 6 2
5 3
4
____________________________
41 40 36 35 27 26 14 13
39 37 34 28 25 15 12
38 33 29 24 16 11
32 30 23 17 10
31 22 18 9 1
21 19 8 2
20 7 3
6 4
5
____________________________
42 41 37 36 28 27 15 14
40 38 35 29 26 16 13
39 34 30 25 17 12
33 31 24 18 11 1
32 23 19 10 2
22 20 9 3
21 8 4
7 5
6
____________________________
43 42 38 37 29 28 16 15
41 39 36 30 27 17 14
40 35 31 26 18 13 1
34 32 25 19 12 2
33 24 20 11 3
23 21 10 4
22 9 5
8 6
7
____________________________
44 43 39 38 30 29 17 16
42 40 37 31 28 18 15 1
41 36 32 27 19 14 2
35 33 26 20 13 3
34 25 21 12 4
24 22 11 5
23 10 6
9 7
8
____________________________
45 44 40 39 31 30 18 17 1
43 41 38 32 29 19 16 2
42 37 33 28 20 15 3
36 34 27 21 14 4
35 26 22 13 5
25 23 12 6
24 11 7
10 8
9
____________________________
46 45 41 40 32 31 19 18 2 1
44 42 39 33 30 20 17 3
43 38 34 29 21 16 4
37 35 28 22 15 5
36 27 23 14 6
26 24 13 7
25 12 8
11 9
10
____________________________
47 46 42 41 33 32 20 19 3 2
45 43 40 34 31 21 18 4 1
44 39 35 30 22 17 5
38 36 29 23 16 6
37 28 24 15 7
27 25 14 8
26 13 9
12 10
11
____________________________
48 47 43 42 34 33 21 20 4 3
46 44 41 35 32 22 19 5 2
45 40 36 31 23 18 6 1
39 37 30 24 17 7
38 29 25 16 8
28 26 15 9
27 14 10
13 11
12
____________________________
49 48 44 43 35 34 22 21 5 4
47 45 42 36 33 23 20 6 3
46 41 37 32 24 19 7 2
40 38 31 25 18 8 1
39 30 26 17 9
29 27 16 10
28 15 11
14 12
13
*/