【蓝桥杯逐日一题】与或异或——DFS

打印 上一主题 下一主题

主题 861|帖子 861|积分 2587

与或异或

   蓝桥杯逐日一题 2024-12-26 与或异或 DFS
  题目描述

   小蓝有一张门电路的逻辑图,如下图所示: 图中每个三角形代表着一种门电路,大概是与门、或门、异或门中的任何一种,它担当上一层中的两个圆形中的数据作为输入,产生一个输出值输出到 下一级 (如图中箭头所示)。图中圆形表示的是暂存的输出结果,取值只大概是 0 或 1,为了便于表示我们用                                         a                            r                            r                            [                            i                            ]                            [                            j                            ]                                  arr[j]                     arr[j] 表示第                                         i                            (                            0                            ≤                            i                            ≤                            4                            )                                  i(0\leq i\leq 4)                     i(0≤i≤4) 行第                                         j                            (                            0                            ≤                            j                            ≤                            i                            )                                  j(0\leq j\leq i)                     j(0≤j≤i) 个圆形的值。此中                                         a                            r                            r                            [                            0                            ]                            =                            (                            I                            n                            [                            0                            ]                            ,                            I                            n                            [                            1                            ]                            ,                            I                            n                            [                            2                            ]                            ,                            I                            n                            [                            3                            ]                            ,                            I                            n                            [                            4                            ]                            )                                  arr[0]=(In[0],In[1],In[2],In[3],In[4])                     arr[0]=(In[0],In[1],In[2],In[3],In[4]) 表示的是输入数据,对于某个                                         a                            r                            r                            [                            i                            ]                            [                            j                            ]                            (                            i                            ≥                            0                            )                                  arr[j](i\geq 0)                     arr[j](i≥0),计算方式为                                         a                            r                            r                            [                            i                            ]                            [                            j                            ]                            =                            a                            r                            r                            [                            i                            −                            1                            ]                            [                            j                            ]                                                         o                            p                                                         a                            r                            r                            [                            i                            −                            1                            ]                            [                            j                            +                            1                            ]                                  arr[j]=arr[i−1][j] \ op \ arr[i−1][j+1]                     arr[j]=arr[i−1][j] op arr[i−1][j+1],此中                                         o                            p                                  op                     op 表示的是将                                         a                            r                            r                            [                            i                            −                            1                            ]                            [                            j                            ]                                  arr[i−1][j]                     arr[i−1][j]、                                        a                            r                            r                            [                            i                            −                            1                            ]                            [                            j                            +                            1                            ]                                  arr[i−1][j+1]                     arr[i−1][j+1] 作为输入,将                                         a                            r                            r                            [                            i                            ]                            [                            j                            ]                                  arr[j]                     arr[j] 作为输出的那个门电路,与门、或门、异或门分别对应于按位与 &、按位或                                         (                            ∣                            )                                  (|)                     (∣) 、按位异或(^)运算符。 如今已知输入为                                         I                            n                            [                            0                            ]                            =                            1                            ,                            I                            n                            [                            1                            ]                            =                            0                            ,                            I                            n                            [                            2                            ]                            =                            1                            ,                            I                            n                            [                            3                            ]                            =                            0                            ,                            I                            n                            [                            4                            ]                            =                            1                                  In[0]=1,In[1]=0,In[2]=1,In[3]=0,In[4]=1                     In[0]=1,In[1]=0,In[2]=1,In[3]=0,In[4]=1,小蓝想要使得最终的输出                                         O                            u                            t                                  Out                     Out 的值为 1,叨教一共有多少种差别的门电路组合方式?此中上图中表现的就是一种合法的方式。
  解题思绪

   那这道题就是通过遍历来找出所能够满意条件的方法,首先详细怎么遍历,就是先通过每一遍历运算符的操作,然而每遍历一次操作,就要判定是否要换行,是否要结束递归,更新到下一个操作之后就有要进行操作符的遍历。
  Accepted

  1. #include <iostream>
  2. using namespace std;
  3. int res = 0;
  4. int arr[6][10]  = {{1,0,1,0,1}};
  5. void dfs(int r,int c,int k) {
  6.     if(k == 1) {
  7.         arr[r][c] = arr[r-1][c] | arr[r-1][c+1];
  8.     }
  9.     if(k == 2) {
  10.         arr[r][c] = arr[r-1][c] ^ arr[r-1][c+1];
  11.     }
  12.     if(k == 3) {
  13.         arr[r][c] = arr[r-1][c] & arr[r-1][c+1];
  14.     }
  15.     // 判断结束条件
  16.     if(r == 4 && c == 0) {
  17.         if(arr[r][c] == 1) {
  18.             res ++;
  19.         }
  20.         return ;
  21.     }
  22.     // 当前行结束
  23.     if(r + c == 4) {
  24.         r++;
  25.         c = 0;
  26.     } else c++;
  27.     for(int i = 1;i <= 3;i++) {
  28.         dfs(r,c,i);
  29.     }
  30. }
  31. int main()
  32. {
  33.     int op[3] = {1,2,3};
  34.    
  35.     for(int k = 1;k <= 3;k++){
  36.       dfs(1,0,k);
  37.     }
  38.     cout<<res<<endl;
  39.     return 0;
  40. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王國慶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表