今天想練練手,所以寫了個(gè)螺旋數(shù)組:
1 #include <iostream>
2
3 using namespace std;
4
5 #define MAXSIZE 8
6
7 void left( int& x, int& y )
8 {
9 --y;
10 }
11
12 void right( int& x, int& y )
13 {
14 ++y;
15 }
16
17 void up( int& x, int& y )
18 {
19 --x;
20 }
21
22 void down( int& x, int& y )
23 {
24 ++x;
25 }
26
27 int main()
28 {
29 int numbers[MAXSIZE][MAXSIZE];
30 // 初始化數(shù)組,若數(shù)值為0,則代表還沒有被賦值
31 for( int i = 0; i<MAXSIZE; ++i )
32 for( int j = 0; j<MAXSIZE; ++j )
33 numbers[i][j] = 0;
34
35 enum Direction{RIGHT,DOWN,LEFT,UP}; // 移動(dòng)方向
36 int x=0,y=0;
37 int Next = -1; // 下一個(gè)位置的值
38 Direction direct = RIGHT;
39 int count = MAXSIZE * MAXSIZE; // 還沒被賦值的數(shù)目
40 int value = 1; //將要被賦值的值
41
42 while( count > 0 )
43 {
44 Next = numbers[x][y];
45 if( Next == 0 && x<MAXSIZE && y<MAXSIZE ) // 無障礙,可以賦值
46 {
47 numbers[x][y] = value;
48 // 賦值成功,count減一, value加一
49 --count;
50 ++value;
51
52 // 設(shè)置Next
53 if( direct == RIGHT )
54 right( x, y );
55 else if( direct == DOWN )
56 down( x, y );
57 else if( direct == LEFT )
58 left( x, y );
59 else if( direct == UP )
60 up( x, y );
61 }
62 else // 有障礙,要轉(zhuǎn)彎
63 {
64 if( direct == RIGHT ) // 若原來方向是右的話,就轉(zhuǎn)彎向下
65 {
66 x = x + 1;
67 y = y - 1;
68 direct = DOWN;
69 }
70 else if( direct == DOWN ) //若原來方向是下的話,就轉(zhuǎn)彎向左
71 {
72 x = x - 1;
73 y = y - 1;
74 direct = LEFT;
75 }
76 else if( direct == LEFT ) //若原來方向是左的話,就轉(zhuǎn)彎向上
77 {
78 x = x - 1;
79 y = y + 1;
80 direct = UP;
81 }
82 else if( direct == UP) //若原來方向是上的話,就轉(zhuǎn)彎向右
83 {
84 x = x + 1;
85 y = y + 1;
86 direct = RIGHT;
87 }
88 }
89 }
90
91 for( int i = 0; i<MAXSIZE; ++i )
92 {
93 for( int j = 0; j<MAXSIZE; ++j )
94 {
95 cout<<numbers[i][j]<<" ";
96 }
97 cout<<endl;
98 }
99
100 return 0;
101 }