分治递归
Lin_PirxW
这个作者很懒,什么都没留下…
展开
-
全排列
#include #define LEN 10char s[LEN];//由于复杂度是指数级的因此序列长度不宜取太大void swap(size_t i , size_t j) { char tmp = s[i]; s[i] = s[j]; s[j] = tmp;}void perm(size_t k , size_t n) {//permutation(全排列) if原创 2013-08-21 13:42:32 · 527 阅读 · 0 评论 -
快速排序(双边调换)
#include #define MAXLEN 100int a[MAXLEN];void swap(int a[] , int i , int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp;}int split(int a[] , int left , int right) { int i = left , j = rig原创 2013-08-22 22:24:03 · 590 阅读 · 0 评论 -
快速排序(单边调换)
#include #define MAXLEN 100int a[MAXLEN];void swap(int a[] , int i , int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp;}int split(int a[] , int left , int right) {//分离,将子序列按照左小右大的规则分离,中间为枢原创 2013-08-22 19:55:01 · 834 阅读 · 0 评论 -
Hanoi塔
#include void hanoi(size_t n , char a , char b , char c) {//将n个盘子的Hanoi塔最上面的n - 1个盘子从a柱运到b柱借助c柱 if ( n > 0 ) { hanoi(n - 1 , a , c , b);//先将最上面的n - 1个盘子从a柱运到c柱借助b柱 printf("%c --> %c\n" , a ,原创 2013-08-22 18:30:18 · 779 阅读 · 0 评论 -
合并排序(分治递归)
#include #include #define MAXLEN 100int a[MAXLEN];void merg(int a[] , int b[] , size_t left , size_t mid , size_t right) { int i , j , k; for ( i = left , j = mid + 1 , k = 0 ; i <= mid原创 2013-08-22 18:04:34 · 672 阅读 · 0 评论 -
合并排序(分治)
#include #include #define MAXLEN 100int a[MAXLEN];//用于存放目标序列void merg(int a[] , int b[] , size_t left , size_t mid , size_t right) {//merg(合并)//将a中下标从left到mid(middle)和从mid + 1到right的两个子序列进行合并原创 2013-08-22 17:31:45 · 664 阅读 · 0 评论 -
整数划分
#include typedef unsigned long long ull;ull idiv(size_t n , size_t m) {//integer divide(整数划分) //返回将整数n划分成最大加数不超过m的划分个数 if ( 1 == m )//最大加数不超过1时只有一种,即1 + 1 + 1......原创 2013-08-21 14:12:47 · 528 阅读 · 0 评论 -
棋盘覆盖
#include #define MAXSIZE 16//(16 × 16 - 1) ÷ 3 = 85在ASCII范围内,如果将棋盘宽定位32的话则需要的字符将超过128了!!!char cb[MAXSIZE][MAXSIZE];//ChessBoard用二维数组表示棋盘char tile = 32;//从ASCII第32个字符开始填充void cov(char cb[MAXSIZE]原创 2013-08-21 16:13:05 · 531 阅读 · 0 评论 -
二分搜索(分治)
#include #define MAXLEN 100int arr[MAXLEN];void bs(int a[] , int x , size_t len) { size_t left = 0; size_t right = len - 1; if ( left <= right ) { size_t mid = (left + right) / 2; if原创 2013-08-21 14:37:15 · 711 阅读 · 0 评论 -
二分搜索(分治递归)
#include #define MAXLEN 100int arr[MAXLEN];int bs(int a[] , int x , size_t left , size_t right) { if ( left <= right ) { size_t mid = (left + right) / 2; if ( x == a[mid] ) return 0;原创 2013-08-21 14:54:42 · 974 阅读 · 0 评论 -
阶乘
#include unsigned long long f(size_t n) {//factorial(阶乘)函数 if ( 0 == n ) return (unsigned long long)1; return n * f(n - 1);}int main() { size_t n; scanf("%u" , &n); printf("%llu\n" , f原创 2013-08-21 12:59:33 · 715 阅读 · 0 评论 -
Fibonacci数列
#include unsigned long long f(size_t n) {//Fibonacci数列 if ( n <= 1 ) return (unsigned long long)1; return f(n - 1) + f(n - 2);}int main() { size_t n; scanf("%u" , &n); printf("%llu\n" ,原创 2013-08-21 13:07:40 · 527 阅读 · 0 评论 -
循环赛日程表(分治)
#include #define SIZE 128typedef unsigned char uc;uc tb[SIZE][SIZE];int main() { size_t wid; size_t grp; size_t pg; size_t i; size_t j; size_t num; size_t k; scanf("%u" , &k);原创 2013-09-14 01:22:00 · 729 阅读 · 0 评论