56pts,求调
查看原帖
56pts,求调
1516462
Deltelec楼主2025/2/4 15:30

代码如下:

#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;
}
2025/2/4 15:30
加载中...