zigzag數組


寫在前面:在《程序員面試寶典》看到的例題:輸入N,用C++生成N*N的zigzag數組,並打印出來。書上給了實現代碼,http://www.cnblogs.com/lovell-liu/archive/2011/09/19/2181598.html也有很好的實現代碼,當然我自己也實現了。


先貼代碼

/*
zigzag數組是一個“之”字形排列的數組,如8*8的zigzag數組: 
     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 <iostream>
#include <vector>
#include <iomanip>

using namespace std;

int main()
{
    int N;
    int s,i,j,dir;
    int squa;
    cout<<"將要實現N*N的zigzag矩陣,請輸入N([1 100]):";
    cin>>N;

vector<vector<int> > a(N,vector<int>(N)); squa=N*N; i=0; // j=0; // s=0; //計數 dir=0//四個行進方向0(right),1(left_down),2(down),3(right_up) while(s<squa) { //數組賦值 a[i][j]=s; //設置下一點(位置和方向) switch(dir) { case 0: //位置 j++; //行進方向 if(0==i) dir=1; if(N-1==i) dir=3; break; case 1: i++; j--; if(N-1==i) dir=0; else if(0==j) dir=2; break; case 2: i++; if(0==j) dir=3; if(N-1==j) dir=1; break; case 3: i--; j++; if(N-1==j) dir=2; else if(0==i) dir=0; break; default: break; } s++; } cout<<"*************************************************************"<<endl; cout<<N<<"*"<<N<<"的zigzag矩陣:"<<endl; for(i=0;i<N;i++) { for(j=0;j<N;j++) cout<<setw(6)<<a[i][j]; cout<<endl; } cout<<"按任意鍵繼續……"; cin.clear(); cin.sync(); cin.get(); return 0; }

可以看到,我的思路就在一個while循環里面:從左上角開始,沿着“之”字形路線,一步步設置zigzag數組的值。這里面,最重要的就是確定每一步行進的方向,它和現在所在位置,以及上一步的方向有關。


結束語:寫完了,不知道我的代碼和其他人的實現代碼相比,效率怎么樣?但是至少思路是清晰的,是吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM