ACM 蛇形填數

OpenSoucre發表於2014-03-31

蛇形填數

時間限制:3000 ms  |  記憶體限制:65535 KB
難度:3
 
描述
在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的值。(n<=100)
輸出
輸出結果是蛇形方陳。
樣例輸入
3
樣例輸出
7 8 1
6 9 2
5 4 3
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

const int dx[] = {1,  0, -1, 0};
const int dy[] = {0, -1,  0, 1};

int main(){
    int n;
    cin >> n;
    vector<vector<int> > matrix(n+2,vector<int>(n+2,0));
    for (int i = 0; i < n+2;  ++ i) {
        matrix[0][i] = matrix[n+1][i] = 1;
        matrix[i][0] = matrix[i][n+1] = 1;
    }
    int step = 0, x = 0, y = n, cnt = 0;
    while(cnt !=n*n){
        step %=4;
        while(matrix[x+dx[step]][y+dy[step]] == 0){
            x +=dx[step];
            y +=dy[step];
            matrix[x][y] = ++cnt;
        }
        step++;
    }
    
    for (int i = 1; i <= n; ++ i) {
        cout<<matrix[i][1];
        for(int j = 2; j <=n; ++ j)
            cout<<" "<<matrix[i][j];
        cout<<endl;
    }
}

 

相關文章