數(shù)據(jù)結(jié)構(gòu)算法:螺旋矩陣算法

字號(hào):

這個(gè)問題看似很難,但是其實(shí)只有有了正確的,規(guī)范的邏輯思想算法以后(就像看了這個(gè)算法以后),感覺其實(shí)這個(gè)問題很簡(jiǎn)單,于是我們不但要學(xué)習(xí)高深的算法,還要掌握一流的邏輯思維理念。這個(gè)算法值得我們學(xué)習(xí)的地方就是他的數(shù)學(xué)建模思想,把復(fù)雜的問題抽象出來,成為了4個(gè)方向的結(jié)構(gòu)式模塊組合,于是復(fù)雜的問題就簡(jiǎn)單化了?。?!
    #include
    #include
    using namespace std;
    void right(); //向左輸入的賦值函數(shù)
    void down();
    void left();
    void up();
    void show(); //顯示函數(shù)
    void sort(); //控制方向的函數(shù)
    int value;
    int direction = 0; //控制方向
    int rightNum = 0; //向右輸入一行的次數(shù)
    int downNum = 0;
    int leftNum = 0;
    int upNum = 0;
    int arrayNum = 0; //自增賦值數(shù)
    int row = 0; //保存行下標(biāo)
    int col =0; //保存列下標(biāo)
    int array[100][100]; //保存數(shù)組
    int main(int argc, char *argv[])
    {
    cout<<\"N*N, enter N:\"<    cin>>value;
    sort();
    show();
    system(\"pause\");
    return 0;
    }
    void sort()
    {
    while(arrayNum != value*value) //循環(huán)跳出條件,賦值完畢
    {
    switch(direction)
    {
    case 0:
    right();
    break;
    case 1:
    down();
    break;
    case 2:
    left();
    break;
    case 3:
    up();
    break;
    default:
    break;
    }
    }
    return;
    }
    void right()
    {
    int m = row;
    int n = col;
    if(m==0&&n==0)
    {
    array[m][n] = ++arrayNum;
    }
    for(int i=n+1; i    {
    array[m][i] = ++arrayNum;
    n++;
    }
    row=m;
    col=n;
    rightNum++;
    direction = 1;
    return;
    }
    void down()
    {
    int m = row;
    int n = col;
    for(int i=m+1; i    {
    array[i][n] = ++arrayNum;
    m++;
    }
    row=m;
    col=n;
    downNum++;
    direction = 2;
    return;
    }
    void left()
    {
    int m = row;
    int n = col;
    for(int i=n-1; i>=leftNum;i--)
    {
    array[m][i] = ++arrayNum;
    n--;
    }
    row=m;
    col=n;
    leftNum++;
    direction = 3;
    return;
    }
    void up()
    {
    int m = row;
    int n = col;
    for(int i=m-1; i>upNum; i--)
    {
    array[i][n] = ++arrayNum;
    m--;
    }
    row=m;
    col=n;
    upNum++;
    direction = 0;
    return;
    }
    void show()
    {
    int n =0;
    for(int i=0; i    {
    for(int j=0; j    {
    cout<    cout<    }
    }