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

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

 

例子:

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

# 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; 
} 

 

转载于:https://www.cnblogs.com/lnlin/p/6901215.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值