您的位置:首页 > 其它

棋盘覆盖问题

2015-06-15 20:48 369 查看
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <algorithm>
#include <ctype.h>
#include <iostream>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <assert.h>
#include <time.h>
#include <sstream>

typedef long long LL;
const int INF = 500000001;
const double EPS = 1e-9;
const double PI = acos(-1.0);
using namespace std;
int g[100][100];
int cur, n;
void gao(int x, int y, int tx, int ty, int len)
{
if(len == 1) return ;
int t = len / 2;
int tmpx = x + t;
int tmpy = y + t;
int k = cur;
cur++;
if(tx < tmpx && ty < tmpy)
{
gao(x, y, tx, ty, t);
}
else
{
g[tmpx - 1][tmpy - 1] = k;
gao(x, y, tmpx - 1, tmpy - 1, t);
}
if(tx < tmpx && ty >= tmpy)
{
gao(x, tmpy, tx, ty, t);
}
else
{
g[tmpx - 1][tmpy] = k;
gao(x, tmpy, tmpx - 1, tmpy, t);
}
if(tx >= tmpx && ty < tmpy)
{
gao(tmpx, y, tx, ty, t);
}
else
{
g[tmpx][tmpy - 1] = k;
gao(tmpx, y, tmpx, tmpy - 1, t);
}
if(tx >= tmpx && ty >= tmpy)
{
gao(tmpx, tmpy, tx, ty, t);
}
else
{
g[tmpx][tmpy] = k;
gao(tmpx, tmpy, tmpx, tmpy, t);
}

}
int main()
{
#ifdef _Te3st
freopen("test0.in", "r", stdin);
freopen("test0.out", "w", stdout);
srand(time(NULL));
#endif
int T, x, y;
int c = 1;
scanf("%d", &T);
while(T--)
{
printf("CASE:%d\n", c++);
cur = 1;
scanf("%d", &n);
scanf("%d %d", &x, &y);
g[x][y] = 0;
gao(0, 0, x, y, n);
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
printf(j?"\t%d":"%d", g[i][j]);
}
puts("");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息