如题,代码如下
#include <cstdio>
#include <iostream>
using namespace std;
int k, l, px, py;
void print(int x, int y, int c, int l)
{
if(l == 2)
{
printf("%d %d %d\n", x, y, c);
return;
}
int L = l / 2;
if(c == 1)
{
print(x, y, 1, L);
print(x - l / 4, y - l / 4, 1, L);
print(x - l + 1, y, 3, L);
print(x, y - l + 1, 2, L);
}
else if(c == 2)
{
print(x, y, 2, L);
print(x - l / 4, y + l / 4, 2, L);
print(x - l + 1, y, 4, L);
print(x, y + l - 1, 1, L);
}
else if(c == 3)
{
print(x, y, 3, L);
print(x + l / 4, y - l / 4, 3, L);
print(x, y - l + 1, 4, L);
print(x + l - 1, y, 1, L);
}
else if(c == 4)
{
print(x, y, 4, L);
print(x + l / 4, y + l / 4, 4, L);
print(x, y + l - 1, 3, L);
print(x + l - 1, y, 2, L);
}
}
void DFS(int x, int y, int c, int l)
{
print(x, y, c, l);
if(l == 2)return;
int nx, ny, nk, nl = l / 2;
nk = nl * 3 / 2;
if(c == 1)
{
nx = x - nk;
ny = y - nk;
if(px <= ny && py <= ny)DFS(x - nl, y - nl, 1, nl);
else if(px <= nx && py > ny)DFS(x - nl, y - l + 1, 2, nl);
else if(px > nx && py <= ny)DFS(x - l + 1, y - nl, 3, nl);
else if(px > nx && py > ny)DFS(x - l + 1, y - l + 1, 4, nl);
}
else if(c == 2)
{
nx = x - nk;
ny = y + nk - 1;
if(px <= nx && py <= ny)DFS(x - nl, y + l - 1, 1, nl);
else if(px <= nx && py > ny)DFS(x - nl, y + nl, 2, nl);
else if(px > nx && py <= ny)DFS(x - l + 1, y + l - 1, 3, nl);
else if(px > nx && py > ny)DFS(x - l + 1, y + nl, 4, nl);
}
else if(c == 3)
{
nx = x + nk - 1;
ny = y - nk;
if(px <= nx && py <= ny)DFS(x + l - 1, y - nl, 1, nl);
else if(px <= nx && py > ny)DFS(x + l - 1, y - l + 1, 2, nl);
else if(px > nx && py <= ny)DFS(x + nl, y - nl, 3, nl);
else if(px > nx && py > ny)DFS(x + nl, y - l + 1, 4, nl);
}
else if(c == 4)
{
nx = x + nk - 1;
ny = y + nk - 1;
if(px <= nx && py <= ny)DFS(x + l - 1, y + l - 1, 1, nl);
else if(px <= nx && py > ny)DFS(x + l - 1, y + nl, 2, nl);
else if(px > nx && py <= ny)DFS(x + nl, y + l - 1, 3, nl);
else if(px > nx && py > ny)DFS(x + nl, y + nl, 4, nl);
}
}
int main()
{
scanf("%d%d%d", &k, &px, &py);
k = 1 << (k - 1);
l = k * 2;
if(px <= k && py <= k)DFS(l, l, 1, l);
else if(px <= k && py > k)DFS(l, 1, 2, l);
else if(px > k && py <= k)DFS(1, l, 3, l);
else if(px > k && py > k)DFS(1, 1, 4, l);
}
求好心人指点