蛇形填數
時間限制: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; } }