棋盘覆盖问题

来源:互联网 发布:济南网络服务公司 编辑:程序博客网 时间:2024/06/16 07:00
#include <iostream>#include <algorithm>using namespace std;int num = 1;int chess[100][100];void FindChess(int tr, int tc, int dr, int dc, int size){    if (size == 1)        return;    int t=num++;    int s = size / 2;    if (dr < tr + s&&dc < tc + s)//左上角    {        FindChess(tr, tc, dr, dc, s);    }    else    {        chess[tr + s - 1][tc + s - 1] = t;        FindChess(tr, tc, tr + s - 1, tc + s - 1, s);    }    if (dr < tr + s&&dc >= tc + s)//右上角    {        FindChess(tr, tc + s, dr, dc, s);    }    else    {        chess[tr + s - 1][tc + s] = t;        FindChess(tr, tc+s, tr + s - 1, tc + s, s);    }    if (dr >= tr + s&&dc < tc + s)//左下角    {        FindChess(tr + s, tc, dr, dc, s);    }    else    {        chess[tr + s][tc + s - 1] = t;        FindChess(tr + s, tc, tr+s,tc + s - 1, s);    }    if (dr >= tr + s&&dc >= tc + s)    {        FindChess(tr + s, tc + s, dr, dc, s);    }    else    {        chess[tr + s][tc + s] = t;        FindChess(tr + s, tc + s, tr + s, tc + s, s);    }}int main(){    int k,posx,posy;    cin >> k >> posx >> posy;    FindChess(1, 1, posx, posy, k);    for (int i = 1; i <= k; i++)    {        for (int j = 1; j <= k; j++)            cout << chess[i][j] << " ";        cout << endl;    }    system("pause");}
原创粉丝点击