首页 > 其他 > 详细

P1228 地毯填补问题

时间:2020-10-10 22:01:45      阅读:33      评论:0      收藏:0      [点我收藏+]
#include<iostream>
#include<vector>

using namespace std;

typedef struct{
    int x, y, c;
}Node;

vector<Node> res;

void dfs(int k, int x, int y, int dx, int dy){
    if(k == 0) return;
    
    int mx = 1 << k - 1, my = 1 << k - 1;
    if(x > mx && y > my){
        res.push_back({mx + dx, my + dy, 4});
        dfs(k - 1, mx, my, dx, dy);
        dfs(k - 1, mx, 1, dx, my + dy);
        dfs(k - 1, 1, my, mx + dx, dy);
        dfs(k - 1, x - mx, y - my, mx + dx, my + dy);
    }
    if(x > mx && y <= my){
        res.push_back({mx + dx, my + 1 + dy, 3});
        dfs(k - 1, mx, my, dx, dy);
        dfs(k - 1, mx, 1, dx, my + dy);
        dfs(k - 1, 1, 1, mx + dx, my + dy);
        dfs(k - 1, x - mx, y, mx + dx, dy);
    }
    if(x <= mx && y > my){
        res.push_back({mx + 1 + dx, my + dy, 2});
        dfs(k - 1, mx, my, dx, dy);
        dfs(k - 1, 1, 1, mx + dx, my + dy);
        dfs(k - 1, 1, my, mx + dx, dy);
        dfs(k - 1, x, y - my, dx, my + dy);
    }
    if(x <= mx && y <= my){
        res.push_back({mx + 1 + dx, my + 1 + dy, 1});
        dfs(k - 1, mx, 1, dx, my + dy);
        dfs(k - 1, 1, 1, mx + dx, my + dy);
        dfs(k - 1, 1, my, mx + dx, dy);
        dfs(k - 1, x, y, dx, dy);
    }
}

int main(){
    int k, x, y;
    
    cin >> k >> x >> y;
    
    dfs(k, x, y, 0, 0);
    
    for(auto t : res) cout << t.x << ‘ ‘ << t.y << ‘ ‘ << t.c << endl;
}

P1228 地毯填补问题

原文:https://www.cnblogs.com/tomori/p/13795303.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!