本题中最多5个命题变项:p,q,r,s,t

每个有0,1两种取值,所以总共32种情况,分别枚举即可。

对于每种情况,计算表达式的值,如果有结果为0的则输出not

难点在于如何计算表达式的值,我们采用递归的方法,把表达式分为一或两个子表达式,并把参数end(本表达式的结束位置)传给上一层,一遍上一层获取第二个子表达式的起始位置。最后通过两个子表达式的结束位置,得到整个表达式的结束位置。

end是本表达式的最后一位的下标,即本表达式的长度减一。

所以 end = 2 + end1 + end2;

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <cstdlib>
 5 using namespace std;
 6
 7 string p;
 8 bool v[5];
 9
10 bool getValue(string p, int &end)
11 {
12     bool a, b;
13     int end1, end2;
14
15     if (p[0] >= 'p')
16     {
17         end = 0;
18         return v[p[0] - 'p'];
19     }
20     if (p[0] == 'N')
21     {
22         a = getValue(p.substr(1, p.length() - 1), end1);
23         end = end1 + 1;
24         return !a;
25     }
26     a = getValue(p.substr(1, p.length() - 1), end1);
27     b = getValue(p.substr(end1 + 2, p.length() - 1), end2);
28     end = 2 + end1 + end2;
29     switch (p[0])
30     {
31     case 'K':
32         return a && b;
33     case 'A':
34         return a || b;
35     case 'C':
36         return !a || b;
37     case 'E':
38         return !(a ^ b);
39     }
40     return 0;
41 }
42
43 int main()
44 {
45     bool ok;
46
47     while (getline(cin, p) && p[0] != '0')
48     {
49         ok = true;
50         for (int i = 0; i < 32; i++)
51         {
52             for (int j = 0; j < 5; j++)
53                 v[j] = (i >> j) % 2;
54             int x;
55             if (!getValue(p, x))
56             {
57                 ok = false;
58                 break;
59             }
60         }
61         if (ok)
62             cout << "tautology" << endl;
63         else
64             cout << "not" << endl;
65     }
66     return 0;
67 }

转自http://www.cnblogs.com/rainydays/archive/2011/02/01/1948678.html

转载于:https://www.cnblogs.com/gj-Acit/archive/2013/01/30/2883618.html

Tautology(poj3295)(DFS)相关推荐

  1. 问题 B: 数独(九宫格经典问题+dfs)

    问题 B: 数独(九宫格经典问题+dfs) 题目描述 这个游戏只有一个规则: 将格子填满使得每一行,每一列,和每一个小的九宫格,恰好包含1-9这9个数字 正是由于规则简单而又变化多端,数独一时间风靡全 ...

  2. Wikioi 2822爱在心中(强连通缩点+dfs)

    2822 爱在心中(强连通缩点+遍历) 2822 爱在心中 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description " ...

  3. 近期题目整理2.0(递归和简单dfs)

    1.HDU-1207 题目描述: 经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故.汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往 ...

  4. bzoj3252攻略(线段树+dfs序)或者(树链剖分+dfs)

    3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1341 Solved: 642 [Submit][Status][Discuss] ...

  5. [COCI2017-2018#5] Pictionary(并查集+dfs)

    贼ex的一道,卡了本仙女整整7个小时orz 思路容易理解,but码力very重要orz 我愿意花五毛钱提升我的码力,换个脑子也行,不换脸这张脸生得俊俏 luogu传送door 题目 在宇宙一个不为人知 ...

  6. LeetCode 1020. 飞地的数量(图的BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给出一个二维数组 A,每个单元格为 0(代表海)或 1(代表陆地). 移动是指在陆地上从一个地方走到另一个地方(朝四个方向 ...

  7. LeetCode 1254. 统计封闭岛屿的数目(图的BFS DFS)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往 ...

  8. LeetCode 695. 岛屿的最大面积(图的BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS广度优先搜索 2.2 DFS深度优先搜索 1. 题目 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直 ...

  9. LeetCode 130. 被围绕的区域(图的BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O). 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' ...

  10. LeetCode 133. 克隆图(图的BFS/DFS)

    1. 题目 给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆).图中的每个节点都包含它的值 val(Int) 和其邻居的列表(list[Node]). class Node {public:in ...

最新文章

  1. LabVIEW实现PCB电路板元器件匹配定位(实战篇—7)
  2. 怎么一个好的短信验证码接口接入到自己的企业网站和APP程序当中选择
  3. 程序员如何让自己的程序少出BUG- [工作]
  4. 《响应式Web图形设计》一13.2 缩放图像带来的问题
  5. 利用Matlab设计滤波器(FDAT)
  6. CodeForces - 1029B.Creating the Contest(最长上升子序列0(n)解法)
  7. Imagelist 控件
  8. android 蓝牙耳机 sco,使用Android识别器内置蓝牙耳机
  9. 《C++ Primer》第五版课后习题解答_第二章(1)(01-08)
  10. 2017.5.5 小朋友的数字 思考记录
  11. wsl使用可视化界面_WSL 科学计算〇 | 适合计算化学的环境配置
  12. 如果你感到ETF内卷了,聪明的你要换条路
  13. 解决问题“Parsing Data for android-23 failed Unsupported major.minor version 51.0”
  14. BASE16、BASE32、BASE64编码特征及正则匹配
  15. hive调优fetch模式抓取,join表测试空key自动转换random,mapreduce动态分区设置
  16. 【超简便的Python】 提取两个列表的共同元素
  17. Vue 实现简单的时间轴 时间进度条
  18. DT(密集轨迹)算法和iDT(改善的密集轨迹)算法
  19. 机器学习08:最近邻学习
  20. 工业相机与镜头分辨率的匹配选型

热门文章

  1. 玫瑰花函数matlab,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神...
  2. oracle怎么格式化sql语句,Oracle sqlplus格式化数据
  3. 谷歌发布android+8.2,谷歌Pixel 2代三款新机齐曝光:骁龙835+Android 8.0
  4. mysql中如何卸载插件_Eclipse中如何卸载插件
  5. python 代码格式规范脚本_Python编码规范
  6. 【渝粤教育】国家开放大学2018年春季 0275-22T内科护理学 参考试题
  7. 【渝粤教育】电大中专电子商务网站建设与维护 (25)作业 题库
  8. 【渝粤题库】广东开放大学 秘书理论与实务 形成性考核
  9. 【渝粤题库】广东开放大学 建设监理 形成性考核
  10. 【渝粤题库】国家开放大学2021春1018国际公法题目