<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 195, comments - 34, trackbacks - 0, articles - 1

    生成zigzag序

    Posted on 2010-05-03 17:26 小強摩羯座 閱讀(275) 評論(0)  編輯  收藏
    生成zigzag序,
    1、分析關鍵,在以zigzag序的每一行,以上三角為計算對象分別以i或j的增序排列,因此利用這一點就可以得出結果。
        程序中s即為zigzag行號,而變換則以i和j交替。所以程序很簡單。

     

    #include<iostream>
    #include<iomanip>

    using namespace std;

    #define M 255

    void zigzag(const int N)
    {
        int squa = N * N;
        int a[M][M]={0};
        for (int i = 0;i < N; i++)
        {
            for (int j = 0;j < N;j++)
            {
                int s = i + j;
                if ( s < N)
                {
                     a[i][j] = s * (s+1)/2 + ( (s %2 !=0)?i:j);//注意?:的優(yōu)先級低于+
                }
                else
                {
                    int sn = (N-1-i) + (N-1-j);
                    a[i][j] = squa - sn * (sn+1)/2 - (N - ( (sn%2 != 0)? i:j));
                }
            }
        }

        for (int i=0; i < N; i++)
        {
            for (int j = 0;j < N;j++)
            {

                cout<<setw(4)<<a[i][j]<<",";
            }
            cout<<endl<<endl;
        }
    }

    int main()
    {
     zigzag(5);
     cout<<endl;
     
     zigzag(8);
     cout<<endl;

        return 0;
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    void zigzag(int n)
    {
    int **a =(int**) malloc(n*sizeof(int *)); //分配空間

    if(NULL == a)
    return ;
    int i;
    for(i = 0; i < n; i++) {
            if((a[i] =(int*) malloc(n * sizeof(int))) == NULL) {
                while(--i>=0)
                    free(a[i]);
                free(a);
                return;
            }
        }

    bool flag = false; //這個標志位用來判斷是從45度角生成還是225度角生成
    int count = 0;
    for(i=0; i<n; i++) //生成的上半部分的數(shù)據(jù)
    {

    if(flag)
    {
       for(int r = 0; r<=i; r++)
       {
        a[r][i-r] = count;
        count++;
       }
       flag = false;
    }
    else
    {
       for(int r = i; r>=0; r--)
       {
        a[r][i-r] = count;
        count++;
       }
       flag = true;
    }
    }
    for(i=n-1; i>=0; i--) //生成的是下半部分的數(shù)據(jù)
    {
    // cout<<i<<endl;
    if(flag)
    {
       for(int r = 0; r<=i-1; r++)
       {
        int r1 = n-i+r;       //代表當前行
        int c1 = 2*n-i-1-r1; //代表當前列
        a[r1][c1] = count;
        count++;
       }
       flag = false;
    }
    else
    {
       for(int r = i-1; r>=0; r--)
       {
        cout<<"ddd"<<endl;
        int r1 = n-i+r;
        int c1 = 2*n-i-1-r1;
    //   cout<<r1<<","<<c1<<endl;
        a[r1][c1] = count;
        count++;
       }
       flag = true;
    }
    }
    for(int r = 0; r<n; r++)
    {
    for(int c=0; c<n; c++)
       cout<<a[r][c]<<",";
    cout<<endl;
    }
    }
    int main()
    {
    int n;
    cin>>n;
    zigzag(n);
    return 0;
    }
    網上還有一個人寫了一個比較巧的算法:
    /**
    * 得到如下樣式的二維數(shù)組
    * zigzag(jpeg編碼里取象素數(shù)據(jù)的排列順序)
    *
    *   0, 1, 5, 6,14,15,27,28,
    *   2, 4, 7,13,16,26,29,42,
    *   3, 8,12,17,25,30,41,43,
    *   9,11,18,24,31,40,44,53,
    *   10,19,23,32,39,45,52,54,
    *   20,22,33,38,46,51,55,60,
    *   21,34,37,47,50,56,59,61,
    *   35,36,48,49,57,58,62,63
    */

    #include <stdio.h>
    int main()
    {
        int N;
        int s, i, j;
        int squa;
        scanf("%d", &N);
        /* 分配空間 */
        int **a = malloc(N * sizeof(int *));
        if(a == NULL)
            return 0;
        for(i = 0; i < N; i++) {
            if((a[i] = malloc(N * sizeof(int))) == NULL) {
                while(--i>=0)
                    free(a[i]);
                free(a);
                return 0;
            }
        }
        /* 數(shù)組賦值 */
        squa = N*N;   
        for(i = 0; i < N; i++)
            for(j = 0; j < N; j++) {
                s = i + j;
                if(s < N)
                    a[i][j] = s*(s+1)/2 + (((i+j)%2 == 0)? i : j);
                else {
                    s = (N-1-i) + (N-1-j);
                    a[i][j] = squa - s*(s+1)/2 - (N - (((i+j)%2 == 0)? i : j));
                }
            }
        /* 打印輸出 */   
        for(i = 0; i < N; i++) {
            for(j = 0; j < N; j++)
                printf("%-6d", a[i][j]);
            printf("\n");
        }
        return 0;
    }




    只有注冊用戶登錄后才能發(fā)表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产成人精品免费视| 免费人成视频在线观看网站 | 一区二区三区无码视频免费福利| 亚洲欧美国产日韩av野草社区| 91人人区免费区人人| 久久综合亚洲色HEZYO社区| 四虎国产精品永久免费网址| 亚洲AV成人一区二区三区AV| 亚洲Aⅴ在线无码播放毛片一线天| 一二三四免费观看在线电影 | 波多野结衣在线免费观看| 久久水蜜桃亚洲av无码精品麻豆| 国产亚洲视频在线观看网址| 免费在线视频一区| 黄色视频在线免费观看| 亚洲AV无码一区二区二三区入口| 97久久免费视频| 亚洲首页国产精品丝袜| 国产成人亚洲午夜电影| 亚洲精品一级无码鲁丝片| 亚洲熟妇AV日韩熟妇在线| 日本最新免费不卡二区在线| 久久久久亚洲AV无码观看 | 日韩伦理片电影在线免费观看| 最新亚洲人成无码网www电影| 久久精品国产亚洲一区二区三区| 国产精品免费观看调教网| 久久精品国产亚洲AV蜜臀色欲| 国产一区二区三区免费| 亚洲小说区图片区| 97精品免费视频| 亚洲欧美日韩中文字幕一区二区三区 | 亚洲综合色婷婷七月丁香| 日本免费一区二区三区| 亚洲国产成人无码AV在线| 亚洲精品卡2卡3卡4卡5卡区| 免费在线观看一区| 亚洲国产成人久久综合野外| 免费的全黄一级录像带| 亚洲国产aⅴ成人精品无吗| 亚洲伊人久久精品影院|