创建一个n行m列的螺旋矩阵,输出在h行c列的点
思路:
记录并更新上、下、左、右边界,然后从左向右记录,同时不要忘记更新上边界;再从上向下记录,之后记得更新右边界; 再从右向左记录,之后更新下边界;再从下向上记录,之后更新左边界。剩下的和这个步骤一样,循环就可以了。
#include<bits/stdc++.h>
using namespace std;
int b[1005][1005];
int main()
{
ios::sync_with_stdio(0);
int n, m;
cin >> n >> m;
int h, c;
cin >> h >> c;
int u = 1;
int d = n;
int l = 1;
int r = m;
int num = 1;
int i = 1, j = 1;
while(num<=n*m)
{
while(num<=n*m&&j<r)
{
b[i][j++] = num;
num++;
}
u++;//更新上边界
while(num <= n*m&&i<d)
{
b[i++][j]= num;
num++;
}
r--;//更新右边界
while(num<=n*m&&j>l)
{
b[i][j--] = num;
num++;
}
d--;//更新下边界
while(num<=n*m&&i>u)
{
b[i--][j] = num;
num++;
}
l++;//更新左边界
}
cout << b[h][c] << endl;
return 0 ;
}