给 T2 写的一个 gen,可以通过修改代码 34 行的 n=6
来改变 n
的值。
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
bool vis[N][N];
int dx[]={1,0,0,-1},dy[]={0,1,-1,0};
int a[N][N],b[N][N];
mt19937_64 rd(clock()^time(0));
int n;
bool chk(int x,int y){
if(x<1||y<1||x>n||y>n||vis[x][y]) return 0;
return 1;
}
int& gv(int x,int y,int dir){
if(dir==0) return a[x+1][y];
if(dir==1) return b[x][y+1];
if(dir==2) return b[x][y];
if(dir==3) return a[x][y];
}
int inc(int x,int y){
return (x-1)*n+y;
}
int fa[N*N];
int fd(int x){
if(x==fa[x]) return x;
return fa[x]=fd(fa[x]);
}
bool mg(int x,int y){
x=fd(x),y=fd(y);
fa[x]=y;
return (x!=y);
}
int main(){
freopen("maze.in","w",stdout);
n=6;
int x=rd()%n+1,y=rd()%n+1;
cout<<n<<' '<<x<<' '<<y<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]=(i!=1),b[i][j]=(j!=1);
}
}
int all=n*n;
for(int i=1;i<=all;i++) fa[i]=i;
int blk=all;
while(all!=1){
int x=rd()%n+1,y=rd()%n+1,dir=rd()%4;
int nx=x+dx[dir],ny=y+dy[dir];
if(!chk(nx,ny)) continue;
if(fd(inc(nx,ny))!=fd(inc(x,y))){
gv(x,y,dir)=0;
all-=mg(inc(x,y),inc(nx,ny));
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<a[i][j]<<' ';
}cout<<endl;
}cout<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<b[i][j]<<' ';
}cout<<endl;
}
}
比赛已结束。