设为首页 加入收藏

TOP

C/C++語言 - 日常算法 - 蛇形填數
2019-06-11 10:08:07 】 浏览:45
Tags:C/C 語言 -日常 算法 蛇形

C/C++語言 - 日常算法 - 蛇形填數

日期 : 2019-06-11

問題描述:

在n×n方阵里填入1,2,…,n×n,要求填成蛇形。

例如,n=4时方阵为:

10   11  12  1

9  16  13  2

8  15  14  3

7  6   5   4

上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n≤8。

代碼部分

 

 1 #include <iostream>
 2 #include <cstring>  // 提供 memset 函數,這是 C 的頭文件
 3 
 4 using namespace std;
 5 
 6 #define MAXN 100
 7 #define test2
 8 #define result
 9 
10 int snakelike(void) {
11     // 蛇形填數
12 int a[MAXN][MAXN];
13 int row;
14     memset(a, 0, sizeof(a));
15     cout << "Please Input the row" << endl;
16     cin >> row;
17 #ifdef test  // 只是為了檢測代碼輸出情況
18     for (int i = 0; i < row; i++)
19     {
20         for (int j = 0; j < row; ++j)
21         {
22             a[i][j] = i;
23         }
24 }
25 #endif
26 #ifdef test2
27     int x = 0, y = row - 1,brush = 1;
28     a[x][y] = 1;
29     while(brush < row * row)
30     {
31         while (x + 1 < row && !a[x + 1][y]) { a[++x][y] = ++brush; }
32         while (y - 1 >= 0 && !a[x][y - 1]) { a[x][--y] = ++brush; }
33         while (x - 1 >= 0 && !a[x - 1][y]) { a[--x][y] = ++brush; }
34         while (y + 1 < row && !a[x][y + 1]) { a[x][++y] = ++brush; }
35     }
36 
37 #endif
38 
39 #ifdef result
40     cout << "---------result---------" << endl << endl;
41     int count = 0;
42     for (int i = 0; i < row; i++)
43     {
44         for (int j = 0; j < row; ++j)
45         {
46             cout << a[i][j] << "\t";
47             count++;
48             if (!(count % row))
49             {
50                 cout << "\b" << endl << endl;
51             }
52         }
53     }
54 #endif
55     return 0;
56     }
57         int main(int argc,char const *argv[])
58 {
59      snakelike();
60      return 0;
61 }
62     

 


C/C++語言 - 日常算法 - 蛇形填數 https://www.cppentry.com/bencandy.php?fid=49&id=226531

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇上POJ刷题 下一篇[CTSC2017] 吉夫特