摘要:
1. 题目:参见《计算机算法设计与分析》P192. 分析:当k>0时,将2k×2k的棋盘分成4个2k-1×2k-1的子棋盘。特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘无特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘,我们可以用一个L型骨牌覆盖这3个较小棋盘的汇合处,这3个子棋盘上被L型骨牌覆盖的方格就成为该棋盘上的特殊方格,从而将问题转化为4个较小规模的棋盘覆盖问题。递归地使用这种分割,知道棋盘转化为1×1的棋盘。3. 代码: 1 #include <iostream> 2 #include <iomanip> 3 # 阅读全文
摘要:
1. 题目:设有2k 个运动员参加循环比赛,要求如下: (1)每个选手必须与其他选手各赛一次 (2)每个选手一天只能赛一次 (3)比赛进行n-1天2. 分析:题目来自《计算机算法设计与分析》 P34页。书中有具体的分析,是采用分治算法来安排的赛程表。代码如下: 1 int a[100][100]={0}; 2 3 void table(int k,int a[][100]) 4 { 5 assert(k>0 && a); 6 //k=0时,只有1个人,赛程直接给出如下a[1][1]=1 7 a[1][1]=1; 8 int n=1; 9 int ... 阅读全文
摘要:
方法一:n各有序的元素应有n!种不同的排列。如若一个排列式的所有的元素都不在原来的位置上,则称这个排列为错排。任给一个n,求出1,2,……,n的错排个数Dn共有多少个。递归关系式为:D(n)=(n-1)(D(n-1)+D(n-2))D(1)=0,D(2)=1可以得到:错排公式为f(n) = n![1-1/1!+1/2!-1/3!+……+(-1)^n*1/n!]其中,n!=1*2*3*.....*n,特别地,有0!=0,1!=1. 解释:n 个不同元素的一个错排可由下述两个步骤完成: 第一步,“错排” 1 号元素(将 1 号元素排在第 2 至第 n 个位置之一),有 n - 1 种方法。 第二步 阅读全文