使用分治法解决棋盘覆盖问题zz
来源:互联网 发布:海康网络摄像机保存 编辑:程序博客网 时间:2024/05/01 20:13
棋盘覆盖问题的解法,使用C语言写成,放在这里是为了以后忘记了可以拿过来看看。
/**//*
* ============================================================================
*
* Filename: chess_board.c
*
* Description: the solution of chess board's coverage
*
* Version: 1.0
* Created: 09/16/06 22:37:43 CST
* Revision: none
* Compiler: gcc
*
* Author: lirui (colin), lirui@ncic.ac.cn
* Company: asl.ncic.ac.cn
*
* ============================================================================
*/
#include <stdio.h>
#define MAXSIZE 1<<10
int chess[MAXSIZE][MAXSIZE];
void chess_board(int tr, int tc, int dr, int dc, int size)
...{
static int tile = 1;
if(1==size) return;
int t = tile++;
int s = (size>>1);
/**//* ---- left-up corner ---- */
if(dr<tr+s && dc<tc+s)...{
chess_board(tr, tc, dr, dc, s);
} else ...{
chess[tr+s-1][tc+s-1] = t;
chess_board(tr, tc, tr+s-1, tc+s-1, s);
}
/**//* ---- right-up corner --- */
if(dr<tr+s && dc>=tc+s)...{
chess_board(tr, tc+s, dr, dc, s);
} else ...{
chess[tr+s-1][tc+s] = t;
chess_board(tr, tc+s, tr+s-1, tc+s, s);
}
/**//* ---- left-down corner--- */
if(dr>=tr+s && dc<tc+s)...{
chess_board(tr+s, tc, dr, dc, s);
} else ...{
chess[tr+s][tc+s-1] = t;
chess_board(tr+s, tc, tr+s, tc+s-1, s);
}
/**//* ---- right-down corner-- */
if(dr>=tr+s && dc>=tc+s)...{
chess_board(tr+s, tc+s, dr, dc, s);
} else ...{
chess[tr+s][tc+s] = t;
chess_board(tr+s, tc+s, tr+s, tc+s, s);
}
}
void print_chess(int size)
...{
int i, j;
for(i = 0; i<size; i++)...{
for(j=0; j<size; j++)
printf("%4d", chess[i][j]);
printf(" ");
}
}
int main( int argc, char *argv[] )
...{
chess_board(0, 0, 1, 2, 16);
print_chess(16);
return 0;
} /**//* ---------- end of function main ---------- */
* ============================================================================
*
* Filename: chess_board.c
*
* Description: the solution of chess board's coverage
*
* Version: 1.0
* Created: 09/16/06 22:37:43 CST
* Revision: none
* Compiler: gcc
*
* Author: lirui (colin), lirui@ncic.ac.cn
* Company: asl.ncic.ac.cn
*
* ============================================================================
*/
#include <stdio.h>
#define MAXSIZE 1<<10
int chess[MAXSIZE][MAXSIZE];
void chess_board(int tr, int tc, int dr, int dc, int size)
...{
static int tile = 1;
if(1==size) return;
int t = tile++;
int s = (size>>1);
/**//* ---- left-up corner ---- */
if(dr<tr+s && dc<tc+s)...{
chess_board(tr, tc, dr, dc, s);
} else ...{
chess[tr+s-1][tc+s-1] = t;
chess_board(tr, tc, tr+s-1, tc+s-1, s);
}
/**//* ---- right-up corner --- */
if(dr<tr+s && dc>=tc+s)...{
chess_board(tr, tc+s, dr, dc, s);
} else ...{
chess[tr+s-1][tc+s] = t;
chess_board(tr, tc+s, tr+s-1, tc+s, s);
}
/**//* ---- left-down corner--- */
if(dr>=tr+s && dc<tc+s)...{
chess_board(tr+s, tc, dr, dc, s);
} else ...{
chess[tr+s][tc+s-1] = t;
chess_board(tr+s, tc, tr+s, tc+s-1, s);
}
/**//* ---- right-down corner-- */
if(dr>=tr+s && dc>=tc+s)...{
chess_board(tr+s, tc+s, dr, dc, s);
} else ...{
chess[tr+s][tc+s] = t;
chess_board(tr+s, tc+s, tr+s, tc+s, s);
}
}
void print_chess(int size)
...{
int i, j;
for(i = 0; i<size; i++)...{
for(j=0; j<size; j++)
printf("%4d", chess[i][j]);
printf(" ");
}
}
int main( int argc, char *argv[] )
...{
chess_board(0, 0, 1, 2, 16);
print_chess(16);
return 0;
} /**//* ---------- end of function main ---------- */
- 使用分治法解决棋盘覆盖问题zz
- 使用分治法解决棋盘覆盖问题
- 利用分治法解决棋盘覆盖问题
- 分治法解决棋盘覆盖
- 分治法-棋盘覆盖问题
- 分治法:棋盘覆盖问题
- 棋盘覆盖问题 (分治法)
- 棋盘覆盖问题 - 分治法
- 棋盘覆盖问题 分治法
- 分治法---棋盘覆盖问题
- 用分治策略解决棋盘覆盖问题
- 递归分治解决棋盘覆盖问题
- 棋盘覆盖问题【分治】
- 分治-棋盘覆盖问题
- 棋盘覆盖问题(分治)
- 棋盘覆盖问题 分治
- 分治法——棋盘覆盖问题
- 分治法--棋盘覆盖问题
- 数学的重要性
- 服了
- KMP字符串匹配算法--算法导论示例zz
- 2005八大必死网站----你的网站有这毛病么?
- 社会交往中的六大著名法则
- 使用分治法解决棋盘覆盖问题zz
- 学生信息管理系统
- 我该做什么
- 以前写过的动态sql例子
- symbian 利用蓝牙串口服务输出调试信息zz
- Google, Happy Birthday.
- 一个控制鼠标的有趣的程序
- 信息安全技术基础学习指导
- Oracle信息安全管理架构帮助企业实现“由内到外”的整体安全