模拟
注意数组是 r c 的结构,不是 x y 的结构。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 50;
char str[maxn][maxn],vis[maxn][maxn];
int dir[4][2] = { {0,1},{1,0},{0,-1},{-1,0} };
void init(int n){
memset( vis,0,sizeof(vis) );
for( int i = 0;i <= n;i++ ){
for( int j = 0;j <= n;j++ ){
str[i][j] = ' ';
}
}
}
int n;
bool solve( int r,int c,int d ){
int nr = r+dir[d][0],nc = c+dir[d][1];
if( nr >= n || nr < 0 || nc >= n || nc < 0 ) return false;
for( int k = 0;k < 4;k++ ){
int nnr = nr + dir[k][0],nnc = nc+ dir[k][1];
if( nnr == r && nnc == c ) continue;
if( nnr >= n || nnr < 0 || nnc >= n || nnc < 0 )continue;
if( str[nnr][nnc] == '#' ) return false;
}
return true;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
init(n);
int i = 0,j = 0,d = 0 ;
while(1){
str[i][j] = '#';
bool flag = solve(i,j,d );
if(flag){
i = i+dir[d][0],j = j+dir[d][1];
}else{
d = (d+1)%4;
bool flag = solve( i,j,d );
if(!flag){
break;
}else{
i = i + dir[d][0],j = j+dir[d][1];
}
}
}
for( int i = 0;i < n;i++ ){
for( int j = 0;j < n;j++ ){
putchar(str[i][j]);
}
puts("");
}
}
return 0;
}