1. 程式人生 > 實用技巧 >A1105:Spiral Matrix (25)

A1105:Spiral Matrix (25)

【螺旋矩陣】三部曲:1、[ 找到 m、n ]   2、[ 開二維陣列填充矩陣 ]   3、[ 輸出矩陣 ]

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 bool cmp(int a, int b) { return a > b; }
 5 
 6 int G[10000][10000];
 7 
 8 int main()
 9 {
10     int N, m, n, x = 10000 ; cin >> N; //輸入第一行
11     
12     int matrix[N+1];
13     for(int
i = 0; i < N; i++) cin >> matrix[i];//輸入第二行 14 15 for(int i = 1; i <= N; i++)//找出[m n] 16 {//[m × n must be equal to N; m≥n; and m?n is the minimum of all the possible values.] 17 for(int j = 1; j <= N; j++) 18 { 19 if(i * j == N && i >= j)
20 { 21 if( (i - j) < x && (i - j) >= 0) 22 { 23 x = (i - j); m = i; n = j; 24 } 25 } 26 } 27 } 28 sort(matrix, matrix + N, cmp);//遞減排序 29 30 int num = 0, round = 0; 31 while
(num < N) 32 { 33 for(int i = round; i < n - round && num < N; i++) G[round][i] = matrix[num++];//填充螺旋矩陣矩陣 34 35 for(int i = round + 1; i < m - round && num < N; i++) G[i][n-round-1] = matrix[num++];//分 U R D L 四個方向 36 37 for(int i = n-round-2; i >= round && num < N; i--) G[m-round-1][i] = matrix[num++]; 38 39 for(int i = m-round-2; i >= round + 1 && num < N; i--) G[i][round] = matrix[num++]; 40 41 round++; 42 } 43 44 for(int i = 0; i < m; i++) //輸出矩陣 45 { 46 for(int j = 0; j < n; j++) 47 { 48 cout << G[i][j]; 49 if(j != n-1) cout << " "; 50 } 51 if(i != m-1) cout << endl; 52 } 53 return 0; 54 }