构造策略:
先走n步 把大于与左上角曼哈顿距离的格子删掉 因为这些格子是达不到的(曼哈顿距离:横坐标之差+纵坐标之差)然后就要处理奇偶性了:如果为偶数,则+1,转换为奇数;否则+2。设一个dist为每次的曼哈顿距离与当前点的差。一层一层向里删除格子,知道这个差dist<=2,游戏结束,玩家已经被困在中间格子内。
AC代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
int n;
int main(){
scanf("%d",&n);
printf("%d",n);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (i-1+j-1>n) printf(" %d",(i-1)*n+j);
printf("\n");
int dist = n+2;
int now = n;
while (dist > 2){
now++;
while (now % 2 == 0) now++;
printf("%d",now);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (i+j == dist) printf(" %d",(i-1)*n+j);
printf("\n");
dist--;
}
//system("pause");
return 0;
}