关于回型矩阵的模拟方法题解
回型矩阵
https://ac.nowcoder.com/acm/contest/19306/1026
先上题目:
顾名思义,我们以二维数组的方式表示。
思路:
在输入数组的时候就进行螺旋输入,
(这时候有人会问:为什么不输出的时候以螺旋输出呢?)
(因为我已经写那么多了且没写注释,回头已经看不懂了(悲))
言归正传,模拟模拟,那就模拟他的路径进行输入。
输入的时候我没怎么进行***螺旋走位:
因为我们走位方式有四种(右->下->左->上)无限循环 那么建立四个标志位,检测走位是否合法:
a(右下角),b(右上角),d(左上角),e(左下角)。
与此同时要建立走位标志(怎么走)以x和y表示(见代码注释)
代码:
using namespace std;
int a, b, d, e, i = 1, j = 1, t, t1 = 1;
int c[20][20];
int main()
{
int n = 0;
cin >> n;
a = n;
b = n;
d = 1;
e = 1;
t = n * n;
int x = 1;
int y = 0;
while (t)
{
while (x == 1 && y == 0)//向右走
{
t--;
c[i][j] = t1;
j++;
t1++;
if (j == b + 1)
{
j = b;
d++;
x = 0;
y = 1;
i++;
}
if (t == 0)
{
x = -2;
y = -2;
break;
}
}
while (x == 0 && y == 1)//向下走
{
t--;
c[i][j] = t1;
i++;
t1++;
if (i == a + 1)
{
i = a;
b--;
x = -1;
y = 0;
j--;
}
if (t == 0)
{
x = -2;
y = -2;
break;
}
}
while (x == -1 && y == 0)//向左走
{
t--;
c[i][j] = t1;
j--;
t1++;
if (j == e - 1)
{
j = e;
a--;
x = 0;
y = -1;
i--;
}
if (t == 0)
{
x = -2;
y = -2;
break;
}
}
while (x == 0 && y == -1)//向上走
{
t--;
c[i][j] = t1;
i--;
t1++;
if (i == d - 1)
{
i = d;
e++;
x = 1;
y = 0;
j++;
}
if (t == 0)
{
x = -2;
y = -2;
break;
}
}
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
cout << c[i][j] << " ";
}
cout << endl;
}
}