蓝桥杯-开灯游戏(算法提高)

简介: 蓝桥杯-开灯游戏(算法提高)

题目描述:


算法提高  开灯游戏  

时间限制:1.0s     内存限制:256.0MB

问题描述

 有9盏灯与9个开关,编号都是1~9。


 每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的)。


 具体如下:


 第一个开关控制第二,第四盏灯;


 第二个开关控制第一,第三,第五盏灯;


 第三个开关控制第二,第六盏灯;


 第四个开关控制第一,第五,第七盏灯;


 第五个开关控制第二,第四,第六,第八盏灯;


 第六个开关控制第三,第五,第九盏灯;


 第七个开关控制第四,第八盏灯;


 第八个开关控制第五,第七,第九盏灯;


 第九个开关控制第六,第八盏灯。


 开始时所有灯都是熄灭的,开关是关闭着的。要求按下若干开关后,使得只有4盏灯亮着。

输出格式

 输出所有可能的方案,每行一个方案,每一行有9个字符,从左往右第i个字符表示第i个开关的状态(" 0" 表示关闭," 1" 表示打开),按字典序输出。下面的样例输出只是部分方案。

样例输出

000001011

000001110

000001111  


程序代码:


#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int k[10];//开关的状态 
int d[10];//灯的状态 
void change(int &i)//引用,改变灯的状态 
{//此处的 &i 相当于 d[] 
  if(i==0)
    i=1;
  else if(i==1)
    i=0;
}
void judge()
{
  for(int i=1;i<=9;i++)
  {
    if(k[i]==1)
    {
      if(i==1)
      {
        change(d[2]);
        change(d[4]);
      }
      else if(i==2)
      {
        change(d[1]);
        change(d[3]);
        change(d[5]);
      }
      else if(i==3)
      {
        change(d[2]);
        change(d[6]);
      }
      else if(i==4)
      {
        change(d[1]);
        change(d[5]);
        change(d[7]);
      }
      else if(i==5)
      {
        change(d[2]);
        change(d[4]);
        change(d[6]);
        change(d[8]);
      }
      else if(i==6)
      {
        change(d[3]);
        change(d[5]);
        change(d[9]);
      }
      else if(i==7)
      {
        change(d[4]);
        change(d[8]);
      }
      else if(i==8)
      {
        change(d[5]);
        change(d[7]);
        change(d[9]);
      }
      else if(i==9)
      {
        change(d[6]);
        change(d[8]);
      }
    }
  }
  int sum=0,flag=0;
  for(int i=1;i<=9;i++)
  {
    if(d[i])//有一盏灯是亮的 
      sum++;//计数加1 
  }
  if(sum==4)//满足题意的四盏灯是亮的 
  {
    flag=1;
    for(int i=1;i<=9;i++)
      cout<<k[i];//输出对应的开关的状态 
  }
  if(flag)
    cout<<endl;
}
void dfs(int s)
{
  if(s==10)
  {
    judge();
    memset(d,0,sizeof(d));
    return ;
  }
  for(int i=0;i<2;i++)
  {
    k[s]=i;
    dfs(s+1);
  }
}
int main()
{
  memset(k,0,sizeof(k));
  memset(d,0,sizeof(d));
  dfs(1);
  return 0;
}
相关文章
|
1月前
|
算法 测试技术 C++
【动态规划算法】蓝桥杯填充问题(C/C++)
【动态规划算法】蓝桥杯填充问题(C/C++)
|
1月前
|
人工智能 算法 BI
第十四届蓝桥杯省赛大学C组(C/C++)三国游戏
第十四届蓝桥杯省赛大学C组(C/C++)三国游戏
|
1月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
60 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
5月前
|
存储 机器学习/深度学习 算法
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
61 3
|
1月前
|
人工智能 算法 Java
【搜索算法】数字游戏(C/C++)
【搜索算法】数字游戏(C/C++)
|
3月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
50 1
|
3月前
|
算法
互动游戏解决遇到问题之基于射线投射寻路算法的问题如何解决
互动游戏解决遇到问题之基于射线投射寻路算法的问题如何解决
|
3月前
|
算法 Python
【python】python基于 Q-learning 算法的迷宫游戏(源码+论文)【独一无二】
【python】python基于 Q-learning 算法的迷宫游戏(源码+论文)【独一无二】
|
5月前
|
算法 数据挖掘 开发者
LeetCode题目55:跳跃游戏【python5种算法贪心/回溯/动态规划/优化贪心/索引哈希映射 详解】
LeetCode题目55:跳跃游戏【python5种算法贪心/回溯/动态规划/优化贪心/索引哈希映射 详解】
|
5月前
|
算法 JavaScript 前端开发
【经典算法】LCR187:破冰游戏(约瑟夫问题,Java/C/Python3/JavaScript实现含注释说明,Easy)
【经典算法】LCR187:破冰游戏(约瑟夫问题,Java/C/Python3/JavaScript实现含注释说明,Easy)
82 1