代码如下:
#include <bits/stdc++.h>
using namespace std;
int k, px, py;
void solve(int x0, int y0, int x, int y, int k)
//x0 y0是左上角位置,xy是障碍位置,k是阶数
{
if (k == 0)
return;
int l = pow(2, k);//计算边长
int x1 = x0 + l/2, y1 = y0 + l/2;//x1 y1是中线
if (x >= x1 && y >= y1)
{
printf("%d %d 4\n",y1 - 1, x1 - 1);
solve(x0, y0, x1 - 1, y1 - 1, k - 1);
solve(x1, y0, x1, y1 - 1, k - 1);
solve(x0, y1, x1 - 1, y1, k - 1);
solve(x1, y1, x, y, k - 1);
}
if (x >= x1 && y < y1)
{
printf("%d %d 2\n", y1, x1 - 1);
solve(x0, y0, x1 - 1, y1 - 1, k - 1);
solve(x1, y0, x, y, k - 1);
solve(x0, y1, x1 - 1, y1, k - 1);
solve(x1, y1, x1, y1, k - 1);
}
if (x < x1 && y >= y1)
{
printf("%d %d 3\n", y1 - 1, x1);
solve(x0, y0, x1 - 1, y1 - 1, k - 1);
solve(x1, y0, x1, y1 - 1, k - 1);
solve(x0, y1, x, y, k - 1);
solve(x1, y1, x1, y1, k - 1);
}
if (x < x1 && y < y1)
{
printf("%d %d 1\n", y1, x1);
solve(x0, y0, x, y, k - 1);
solve(x1, y0, x1, y1 - 1, k - 1);
solve(x0, y1, x1 - 1, y1, k - 1);
solve(x1, y1, x1, y1, k - 1);
}
}
int main()
{
cin >> k >> px >> py;
solve(1, 1, px, py, k);
return 0;
}