• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ivy-jie

            progress ...

            C++博客 首頁 新隨筆 聯系 聚合 管理
              9 Posts :: 41 Stories :: 6 Comments :: 0 Trackbacks

            題目要求:
            用C編寫程序并注釋
            N*N矩陣輸出
            N=3時輸出
            1 2 3
              8 9 4
              7 6 5
            N=4時輸出
               1  2  3   4
               12 13 14  5
               11 16 15  6
               10  9  8  7

            編寫當N時的輸出

            代碼:
            #include <stdio.h>
            #include <stdlib.h>
            #include <string.h>

            enum {
                    MASK_UP                = 1,
                    MASK_DOWN        = 2,
                    MASK_LEFT        = 4,
                    MASK_RIGHT        = 8,
                   
                    TURN_NONE        = 0,
                    TURN_UP                = 1,
                    TURN_DOWN        = 2,
                    TURN_LEFT        = 3,
                    TURN_RIGHT        = 4,
            };

            int directs[5][2] = {
                    {0, 0},                // 0:TURN_NONE
                    {-1, 0},        // 1:TURN_UP
                    {1, 0},                // 2:TURN_DOWN
                    {0, -1},        // 3:TURN_LEFT
                    {0, 1},                // 4:TURN_RIGHT
            };

            int rules[16] = {
                    TURN_NONE,        // 0:none
                    TURN_UP,        // 1:up
                    TURN_DOWN,        // 2:down
                    TURN_NONE,        // 3:invalid
                    TURN_LEFT,        // 4:left
                    TURN_LEFT,        // 5:left and up
                    TURN_DOWN,        // 6:left and down
                    TURN_NONE,        // 7:invalid
                    TURN_RIGHT,        // 8:right
                    TURN_UP,        // 9:right and up
                    TURN_RIGHT,        // 10:right and down
                    TURN_NONE,        // 11-15:invalid
            };
            int next_pos(int *matrix, int n, int i, int j, int *nexti, int *nextj)
            {
                    if (i == -1 || j == -1)
                    {
                            *nexti = 0;
                            *nextj = 0;
                            return 1;
                    }
                    int mask = 0;
                    if (i - 1 >= 0 && matrix[(i - 1) * n + j] == 0)                // up ok
                            mask |= MASK_UP;
                    if (i + 1 <= n - 1 && matrix[(i + 1) * n + j] == 0)        // down ok
                            mask |= MASK_DOWN;
                    if (j - 1 >= 0 && matrix[i * n + (j - 1)] == 0)                // left ok
                            mask |= MASK_LEFT;
                    if (j + 1 <= n - 1 && matrix[i * n + (j + 1)] == 0)        // right ok
                            mask |= MASK_RIGHT;
                   
                    int rule = rules[mask];
                    int *direct = directs[rule];
                    if (direct[0] == 0 && direct[1] == 0)
                            return 0;
                    *nexti = i + direct[0];
                    *nextj = j + direct[1];
                    return 1;
            }

            int main(int argc, char *argv[])
            {
                    if (argc != 2)
                            return -1;
                    int n = atoi(argv[1]);
                    if (n <= 0)
                            return -1;
                   
                    int *matrix = (int*)malloc(n * n * sizeof(int));
                    memset(matrix, 0, n * n * sizeof(int));

                    int i = -1;
                    int j = -1;
                    int value = 1;
                    while (next_pos(matrix, n, i, j, &i, &j) != 0)
                    {
                            matrix[i * n + j] = value++;
                    }

                    for (i = 0; i < n; i++)
                    {
                            for (j = 0; j < n; j++)
                            {
                                    printf("%d", matrix[i * n + j]);
                                    if (j != n - 1)
                                            printf("\t");
                            }
                            printf("\n");
                    }
                   
                    free(matrix);
                    return 0;
            }

            posted on 2009-06-28 12:04 ivy-jie 閱讀(167) 評論(0)  編輯 收藏 引用 所屬分類: c++
            精品久久国产一区二区三区香蕉| 久久五月精品中文字幕| 久久久久人妻一区二区三区vr| 蜜桃麻豆WWW久久囤产精品| 久久精品国产99久久久古代| 人妻精品久久久久中文字幕69 | 久久精品一区二区影院| 日韩美女18网站久久精品| 亚洲国产精品高清久久久| …久久精品99久久香蕉国产| 久久国产精品偷99| 久久婷婷五月综合97色一本一本| 久久99精品九九九久久婷婷| 国内精品久久久久影院薰衣草 | 亚洲色欲久久久久综合网 | 欧美综合天天夜夜久久| 2019久久久高清456| 伊人热人久久中文字幕| 国产美女亚洲精品久久久综合 | 久久久久精品国产亚洲AV无码| 国产成人无码久久久精品一| 日批日出水久久亚洲精品tv| AA级片免费看视频久久| 蜜臀av性久久久久蜜臀aⅴ麻豆| 久久精品国产亚洲AV不卡| 91精品日韩人妻无码久久不卡| 欧美一区二区久久精品| 精品熟女少妇aⅴ免费久久| 97久久精品无码一区二区天美 | 久久综合中文字幕| 久久婷婷激情综合色综合俺也去| 久久久久亚洲av毛片大| 久久九九久精品国产免费直播| 99国产欧美久久久精品蜜芽 | 亚洲日韩欧美一区久久久久我| 国内精品久久久久久野外| 午夜欧美精品久久久久久久| 99久久免费国产精品特黄| 色偷偷88欧美精品久久久| 亚洲国产日韩欧美久久| 日本精品久久久久久久久免费|