|

楼主 |
发表于 2011-7-9 20:12:43
|
显示全部楼层
首先,穷举法是最为简单,也是最为直接,同时又是最为耗时的一种解决实际问题的算法思想。
穷诀法的基本思想是:在可能的解空间中穷举出每一种肯能的解,并对每个可能的解进行判断,从中得到答案。
其中最关键步骤是:划定问题的解体空间,并在该解空间中一一枚举每个可能的解。
这里需要注意的是:一、解空间必须覆盖问题的全部解。
二、解空间集合及问题的集合一定是离散的,简单的说就是集合中的元素是可列的、有限的。
------------------------------------------------------------------------------------------------------------------
问题分析:假设TOM的5本书进行编号{ 1,2,3,4,5 },每个同学可借到的书的范围就限定在 { 1,2,3,4,5}中,因此TOM的借书方案不肯能超过5*5*5=125种,所以,这125种借书方案可以构成的解空间为{( x1, x2, x3 )| 1<= xi <= 5 , 且 x1 != x2 != x3 }
由上所述,可以得到该算法为:
for( i = 1; i <= 5; i++ )
for( j = 1; j <= 5; j++ )
for( k = 1; k <= 5; k++ )
if( i != j && j != k && i != k )
所以程序完整代码如下:
- #include "stdio.h"
- int main()
- {
- int i,j,k;
- int enter = 0;
- printf("There are differnet methods for TOM to distribute his book to A,B,C\n");
- for( i = 1; i <= 5; i++ )
- for( j = 1; j <= 5; j++ )
- for( k = 1; k <= 5; k++ )
- if( i != j && j != k && i != k )
- {
- enter++;
- printf("(%d,%d,%d)",i,j,k);
- if( enter == 10 )
- {
- printf("\n");
- enter = 0;
- }
- }
- return 0;
- }
复制代码
|
|