【
例2】圆桌吃饭问题 n个人围着一张圆桌吃饭,每个人都不愿意两天与同一人为邻,问最多能坐多少天,并给出一种排列方案? 为了清楚的理解问题的实质,我们以图的模型来描述它:设G=(V,E)为一完全图,|V|=n。图中的每个顶点代表一个人,连结顶点的边表示人之间的相邻关系。因此,每种围绕圆桌的吃饭方案就成为图中的一条哈密尔顿回路。设L=<v1,v2,…,vn>为G中的一条哈密尔顿回路,其中所含的边的集合记为e(L)。试求m与L1,L2,…,Lm,使得e(Li)∩e(Lj)=φ,并且m达到最大值。 为了求得m的最大值,我们可以先估算一下m上界。完全图G共有n(n-1)/2条边,每条哈密尔顿回路含有n条边,可见m的上界是(n-1)/2。当n为奇数时,m=(n-1)/2;当n为偶数时,m=n/2-1。那么这个上界是不是精确上界呢?如能构造出m条哈密尔顿回路,也就证明了它是本题的答案。 现给出构造方法:作一圆,把圆周分成n-1等分,标上n-1个刻度,将顶点1至n-1依次排列在圆周上,顶点n放在圆心。先从圆心出发,向任意点连一条线,再从这点出发,沿圆周向左右两个方向迂回连线,直到连完圆周上所有的点,再连回圆心。这样就构造出一条哈密尔顿回路。保持所有的顶点位置不变,把所有连线围绕圆心逆时针方向旋转一个刻度,得到一条新的哈密尔顿回路。这样连续旋转(n-1)div 2次,就得到了(n-1)div 2条回路。 下面来证明此算法的正确性。这只要证明所有的边旋转时都不重叠即可。 观察下图,可以把所有边分为两大类,圆的半径和弦,弦又可以按它的长度分为(n-1)div 2类。显而易见,不同类别的边在旋转时是不会重叠的。那么相同类别的边会不会重叠呢?其实每类边至多只有两条,且又处在圆中相对的位置上,所以当所有的边都旋转半周以后,是不会重叠的。
小结: 通过构造数学模型解题,常常能使题目变得易于解决,程序也易于实现。当然,数学方法对选手的数学功底要求也很高,必须有很高的创造性思维能力,有时还需要很好的空间想象能力。用数学方法解题,最重要是要做到不重不漏。数学方法不像其他一些方法如动态规划,有一个现成的模式可套,实际上,每道具体的问题都有它具体的方法。竞赛的时候时间紧张,数学方法不一定就是灵丹妙药。想出来自然最好,想不出来,有时也不妨试试一些笨方法,做得了多少算多少。当然,当发现搜索的方法根本不可能在规定时间内给出答案的话,不妨从数学的角度出发,寻找规律。本来,数学规律与我们平常说的搜索一类的方法就是互相补充的。