数据结构——枚举算法笔记

枚举算法:
    又称为穷举法,在解决问题时,可能无法按照一定的规律从众多的答案中找出正确
 答案,此时,可以从众多的候选解中逐一取出候选答案,并验证选取的答案是否为
 正确答案。
 缺点:运算量大,解题效率低。
 优点:思路简单,程序编写调试方便。

 

例子:

逻辑推理题,问谁在说慌?
    张三说李四在说谎,李四说王五在说谎,王五说张三,李四都在说谎。
此类逻辑推理题无法用正常推理方法得出答案,但可以假设一个条件成立,在反推回题
设,如果与题设不矛盾,这是正确答案,反之不对。

# include <stdio.h>

int main(void)
{
    int a, b, c;   // 用来指代张三,李四,王五三个人,1代表说谎,0表示没有说谎
    
    for (a = 0; a <= 1; ++a)
        for (b = 0; b <= 1; ++b)
            for (c = 0; c <= 1; ++c)
            {
                if (0 == a)  // 假如张三没有说谎
                    if (1 == b)  // 李四在说谎
                        if (0 == c)  // 王五没有说谎
                            if (a == 1 && b == 1)
                                printf("%-3d %-3d %-3d\n", a, b, c);
                
                if (0 == b)  // 假如李四没有说谎
                    if (1 == a)  // 张三在说谎 
                        if (1 == c)  // 王五在说谎 
                            if (a != 1 || b != 1)
                                printf("%-3d %-3d %-3d\n", a, b, c);
                                
                if (0 == c)  // 假如王五没有说谎
                    if (1 == a && 1 == b)  // 张三和李四都在说谎
                        if (b == 0 && c == 0)
                            printf("%-3d %-3d %-3d\n", a, b, c);
             } 
    
    return 0; 
} 

 

posted @ 2017-05-24 21:51  荒唐了年少  阅读(471)  评论(0编辑  收藏  举报