#556. 蛇形矩阵(3月23日)
题目描述
输入两个整数 n 和 m,输出一个 n 行 m 列的矩阵,将数字 1 到 n×m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数 n 和 m。
输出格式
输出满足要求的矩阵。 矩阵占 n 行,每行包含 m个空格隔开的整数。
样例
输入数据 1
3 3
输出数据 1
1 2 3
8 9 4
7 6 5
数据范围
1≤n,m≤100.
代码
//#556. 蛇形矩阵(3月23日)
#include<iostream>
using namespace std;
int a[110][110] = {0};
int main()
{
int n , m;
cin >> n >> m;
int ans = 1;
// for(int j = 0 ; j <= m+1 ; j++)
// a[0][j] = -1;
// for(int j = m+1 , i = 0 ; i <= n+1 ; i++)
// a[i][j] = -1;
// for(int j = m+1 , i = n+1 ; j >= 0 ; j--)
// a[i][j] = -1;
// for(int j = 0 , i = n+1 ; i >= 0 ; i--)
// a[i][j] = -1;
a[0][1] = a[1][0] = -1;
a[0][m] = a[1][m+1] = -1;
a[n][m+1] = a[n+1][m] = -1;
a[n][0] = a[n+1][1] = -1;
int i = 1 , j = 1;
while(ans <= n*m){
while(1){
if(a[i][j] != 0){
i++;
j--;
break;
}
a[i][j] = ans++;
j++;
}
while(1){
if(a[i][j] != 0){
j--;
i--;
break;
}
a[i][j] = ans++;
i++;
}
while(1){
if(a[i][j] != 0){
i--;
j++;
break;
}
a[i][j] = ans++;
j--;
}
while(1){
if(a[i][j] != 0){
j++;
i++;
break;
}
a[i][j] = ans++;
i--;
}
}
// for(int i = 0 ; i <= n+1 ; i++)
// {
// for(int j = 0 ; j <= m+1 ; j++)
// cout << a[i][j] << " ";
// cout << endl;
// }
for(int i1 = 1 ; i1 <= n ; i1++){
for(int j1 = 1 ; j1 <= m ; j1++)
cout << a[i1][j1] << " ";
cout << endl;
}
return 0;
}