toolong114514 @ 2023-04-25 21:23:34
#include<iostream>
using namespace std;
int pow_2[20]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096};
bool vst[1145][1145];
int k,x,y;
void f(int xx,int yy,int dir,int nk){
if(vst[xx][yy]==true) return;
if(nk<1) return;
int np=pow_2[nk-1];
if(dir==1){//目标在左上角
int tx=xx+np,ty=yy+np;
if(vst[tx][ty]==true) return;
else vst[tx][ty]=true;
cout<<tx<<" "<<ty<<" "<<dir<<" "<<endl;
f(xx,yy,1,nk-1);//左上格
f(xx+np,yy,2,nk-1);//左下格
f(xx+np,yy+np,1,nk-1);//右下格
f(xx+np-1,yy+np,3,nk-1);//右上格
}
else if(dir==2){//目标在右上角
int tx=xx+np,ty=yy+np-1;
if(vst[tx][ty]==true) return;
else vst[tx][ty]=true;
cout<<tx<<" "<<ty<<" "<<dir<<endl;
f(xx,yy,4,nk-1);//左上格
f(xx+np,yy,2,nk-1);//左下格
f(xx+np,yy+np,1,nk-1); //右下格
f(xx+np-1,yy+np,3,nk-1);//右上格
}
else if(dir==3){//目标在左下角
int tx=xx+np-1,ty=yy+np;
if(vst[tx][ty]==true) return;
else vst[tx][ty]=true;
cout<<tx<<" "<<ty<<" "<<dir<<endl;
f(xx,yy,4,nk-1);//左上格
f(xx+np,yy,3,nk-1);//左下格
f(xx+np,yy+np,2,nk-1); //右下格
f(xx+np-1,yy+np,3,nk-1);//右上格
}
else {//目标在右下角
int tx=xx+np-1,ty=yy+np-1;
if(vst[tx][ty]==true) return;
else vst[tx][ty]=true;
cout<<tx<<" "<<ty<<" "<<dir<<endl;
f(xx,yy,4,nk-1);//左上格
f(xx+np,yy,2,nk-1);//左下格
f(xx+np,yy+np,4,nk-1); //右下格
f(xx+np-1,yy+np,3,nk-1);//右上格
}
}
int main(){
cin>>k;
cin>>x>>y;
vst[x][y]=true;
int tmp1=pow_2[k],tmp2=pow_2[k-1];
if(x<=tmp2&&y<=tmp2) f(1,1,1,k);//左上角
else if(x<=tmp2&&y<=tmp1) f(1,1,2,k);//右上角
else if(x<=tmp1&&y<=tmp2) f(1,1,3,k);//左下角
else f(1,1,4,k);//右下角
return 0;
}
by CityFish @ 2023-04-29 19:10:11
可以看一下我的贴子
by CityFish @ 2023-04-29 19:10:49
希望能帮到你
by lijuncheng_1207 @ 2023-07-17 10:14:20
#include<bits/stdc++.h>
using namespace std;
#define print(x,y,w) printf("%d %d %d\n",t+x-1,l+y-1,w)
const int N=1e3;
int a[N][N],vis[N][N];
void run(int l,int r,int t,int b,int x,int y){
int w2=(r-l+1)>>1;
if(w2==1){
if(x<=w2)
if(y<=w2)
print(2,2,1);
else
print(2,1,2);
else
if(y<=w2)
print(1,2,3);
else
print(1,1,4);
return ;
}
if(x<=w2){
if(y<=w2){
print(w2+1,w2+1,1);
run(l,r-w2,t,b-w2,x,y);
run(l+w2,r,t,b-w2,w2,1);
run(l,r-w2,t+w2,b,1,w2);
run(l+w2,r,t+w2,b,1,1);
}
else{
print(w2+1,w2,2);
run(l,r-w2,t,b-w2,w2,w2);
run(l+w2,r,t,b-w2,x,y-w2);
run(l,r-w2,t+w2,b,1,w2);
run(l+w2,r,t+w2,b,1,1);
}
}
else{
if(y<=w2){
print(w2,w2+1,3);
run(l,r-w2,t,b-w2,w2,w2);
run(l+w2,r,t,b-w2,w2,1);
run(l,r-w2,t+w2,b,x-w2,y);
run(l+w2,r,t+w2,b,1,1);
}
else{
print(w2,w2,4);
run(l,r-w2,t,b-w2,w2,w2);
run(l+w2,r,t,b-w2,w2,1);
run(l,r-w2,t+w2,b,1,w2);
run(l+w2,r,t+w2,b,x-w2,y-w2);
}
}
return ;
}
int main(){
int x,y,k;
cin>>k>>x>>y;
run(1,1<<k,1,1<<k,x,y);
return 0;
}