用二維陣列儲存資料,由左上角開始填數字,接下來四個 while 分別表示 : 向右、向下、向左、向上,當 i 或 j 超出範圍或目標格已經有值時,跳出迴圈。一直重複直到全部填完。
若 m==2 將 matrix[i][j] 和matrix[j][i] 全部交換。
AC (66ms, 540KB)
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, m;
bool valid(int i, int j){
return i>=0 and i<n and j>=0 and j<n;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int t; cin>>t;
while(t--){
cin>>n>>m;
vector<vector<int>> matrix(n, vector<int>(n, 0));
int i(0), j(0), cnt(1);
matrix[i][j]=cnt;
while(cnt<n*n){
while(valid(i, j+1) and matrix[i][j+1]==0) matrix[i][++j]=++cnt;
while(valid(i+1, j) and matrix[i+1][j]==0) matrix[++i][j]=++cnt;
while(valid(i, j-1) and matrix[i][j-1]==0) matrix[i][--j]=++cnt;
while(valid(i-1, j) and matrix[i-1][j]==0) matrix[--i][j]=++cnt;
}
if(m==2)
for(int i=0; i<n-1; i++)
for(int j=i+1; j<n; j++)
swap(matrix[i][j], matrix[j][i]);
for(auto arr : matrix){
for(auto val : arr) cout<<val<<setw(6);
cout<<'\n';
}
cout<<'\n';
}
return 0;
}
C++
ZeroJudge
Uploading file…_iujrjskv8
Jul 3, 2024C語言學習筆記
Jun 11, 2024花中judge d001. Jumping Array Puzzle (題目連結) BFS作法 AC (90ms, 8.4MB) #include <bits/stdc++.h> using namespace std; #define int long long #define x first
Jul 25, 2022f315. 低地距離 (題目連結) BFS做法 AC (0.7s, 12MB) #include <bits/stdc++.h> #define int long long using namespace std; const int N = 1e5 + 5;
Jul 25, 2022or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up