蛇形矩阵(牛客板子)
简化做法
#include <bits/stdc++.h>
using namespace std;
int a[1010][1010];
signed main(){
int n; cin >> n;
int cnt = 1, x = 1, y = 1;
bool flag = false;
while(cnt <= n * n){
if(x <= n && y <= n) a[x][y] = cnt++;
if(!flag) --x, ++y;
else ++x, --y;
if(!x) flag = true, x = 1;
if(!y) flag = false, y = 1;
}
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j){
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
纯模拟
#include <bits/stdc++.h>
using namespace std;
int a[1010][1010];
signed main(){
int n; cin >> n;
int cnt = 1;
for(int k = 1; k <= n; ++k){
if(k & 1){
for(int i = k, j = 1; i >= 1;){
a[i--][j++] = cnt++;
}
}else{
for(int i = 1, j = k; j >= 1;){
a[i++][j--] = cnt++;
}
}
}
for(int k = n - 1; k >= 1; --k){
if(k & 1){
for(int i = n, j = n - k + 1; j <= n;){
a[i--][j++] = cnt++;
}
}else{
for(int i = n - k + 1, j = n; i <= n;){
a[i++][j--] = cnt++;
}
}
}
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j){
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}

浙公网安备 33010602011771号