简单的模拟题,只要注意到方向就行了,我直接用一个vis数组来进行边界的控制,所以就不需要对map数组进行判断。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N = 100;
int row,col;
bool vis[N][N];;
int map[N][N];
int di[4][2] = {0,1,1,0,0,-1,-1,0};
int main(void)
{
cin>>row>>col;
memset(vis,true,sizeof(vis));
for(int i=1; i<=row; ++i)
for(int j=1; j<=col; ++j)
vis[i][j] = false;
int n = 0, dir = 0;
int x = 1, y = 1;
while(1)
{
while(!vis[x][y])
{
vis[x][y] = true;
map[x][y] = n;
n = (n+1) % 26;
x += di[dir][0];
y += di[dir][1];
}
x -= di[dir][0];
y -= di[dir][1];
dir = (dir+1)%4;
x += di[dir][0];
y += di[dir][1];
//cout<<" xy "<<x<<" "<<y<<endl;
if(vis[x][y])
break;
}
for(int i=1; i<=row; ++i)
{
for(int j=1; j<=col; ++j)
printf(" %c",'A'+map[i][j]);
printf("\n");
}
return 0;
}