利用分治法解决棋盘覆盖问题

摘要:
1.问题描写叙述:点击打开链接2.代码:#define_CRT_SECURE_NO_WARNINGS#include#include#include#include#include#include#include#include#include#inclu

1.问题描写叙述:点击打开链接

2.代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<cassert>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cctype>
#include<functional>
using namespace std;

#define me(s) memset(s,0,sizeof(s))
#define pb push_back
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair <int, int> P;




const int N = 1 << 11;
int A[N][N];
int n, a, b;
int idx;

void solve(int r1, int r2, int c1, int c2, int x, int y)
{
	if (r2-r1==1)return;
	int t = idx++;
	int mr = (r1 + r2)/2, mc = (c1 + c2)/2;
	if (x<mr&&y<mc)solve(r1, mr, c1, mc, x, y);
	else solve(r1, mr, r2, mc, mr-1,mc-1), A[mr-1][mc-1] = t;

	if (x<mr&&y >= mc)solve(r1, mr, mc, c2, x, y);
	else solve(r1, mr, mc, c2, mr-1,mc), A[mr-1][mc] = t;

	if (x >= mr&&y<mc)solve(mr, r2, c1, mc, x, y);
	else solve(mr, r2, c1, mc, mr,mc-1), A[mr][mc-1] = t;

	if (x >= mr&&y >= mc)solve(mr, r2, mc, c2, x, y);
	else solve(mr, r2, mc, c2, mr,mc), A[mr][mc] = t;
}

int main()
{
	while (~scanf("%d%d%d", &n, &a, &b))
	{
		me(A); idx = 1;
		solve(0, (1 << n), 0, (1 << n), a - 1, b - 1);
		A[a - 1][b - 1] = 0;
		for (int i = 0; i<(1 << n); i++)
		{
			for (int j = 0; j<(1 << n); j++)
			{
				printf("%2d%c", A[i][j], " 
"[j == (1 << n) - 1]);
			}
			puts("");
		}

	}
}

免责声明:文章转载自《利用分治法解决棋盘覆盖问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇.getCellType()的几种类型值微信支付jsapi下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

STM32---喜提点灯

一:编译第一个程序 intmain()  //主函数 { } voidSystemInit()  //在执行主函数前,会被调用。不进行实现。在启动文件中被调用 { } ; Reset handler Reset_Handler PROC EXPORT Reset_Handler...

句柄

句柄是一个序号, 它不是一个内存地址。 它用于管理Windows内核对象,比如用户打开一个文件,Windows即会建立一个文件内核对象,所谓内核对象就是一块内存结构,里面有文件路径,文件大小,当前文件指针等等信息。Windows系统会打开很多的文件,因此就有很多的文件内核对象,同样Windows系统还会建立其它的类型的很多很多的内核对象。如何管理这么多的内...

iOS中Block的用法,举例,解析与底层原理

1. 前言 Block:带有自动变量(局部变量)的匿名函数。它是C语言的扩充功能。之所以是拓展,是因为C语言不允许存在这样匿名函数。 1.1 匿名函数 匿名函数是指不带函数名称函数。C语言中,函数是怎样的呢?类似这样: int func(int count); 调用的时候: int result = func(10); func就是它的函数名。也可以通...

C语言中typedef可以出现在struct定义之前

一直以为typedef必须在相应的数据类型之后才可定义,原来在前面也可以: #include <stdio.h> #include <stdlib.h> /* the typedef is before the struct */ typedef struct pcap_if* pcap_if_p; struct pcap_if...

wParam与lParam的区别

wParam与lParam的区别 lParam 和 wParam 是宏定义,一般在消息函数中带这两个类型的参数,通常用来存储窗口消息的参数。 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);wParam 通常用来存储小段信息,如,标志lParam...

redis基础数据结构源码浅析

基于redis 5.0.6 先列个表格 类型 实现 string sds list quicklist set intset hashtable zset ziplist skiplist+hashtable hash ziplist hashtable string redis的string(字符串)实现称为SDS(...