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

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

题目描述:


算法提高  开灯游戏  

时间限制: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;
}
相关文章
|
30天前
|
机器学习/深度学习 算法 C++
【DFS/回溯算法】2016年蓝桥杯真题之路径之谜详解
题目要求根据城堡北墙和西墙箭靶上的箭数,推断骑士从西北角到东南角的唯一路径。每步移动时向正北和正西各射一箭,同一格不重复经过。通过DFS回溯模拟“拔箭”过程,验证路径合法性。已知箭数约束路径唯一,最终按编号输出行走顺序。
|
2月前
|
机器学习/深度学习 人工智能 算法
当AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
TimeGuessr融合AI与历史文化,首创时间与空间双维度评分体系,结合分段惩罚、Haversine距离计算与加权算法,辅以连击、速度与完美奖励机制,实现公平且富挑战性的游戏体验。
|
算法 测试技术 C++
【动态规划算法】蓝桥杯填充问题(C/C++)
【动态规划算法】蓝桥杯填充问题(C/C++)
|
人工智能 算法 BI
第十四届蓝桥杯省赛大学C组(C/C++)三国游戏
第十四届蓝桥杯省赛大学C组(C/C++)三国游戏
|
存储 机器学习/深度学习 算法
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
331 3
|
10月前
|
算法 搜索推荐 Java
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
313 6
|
10月前
|
算法 Java C++
【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题
本文介绍了经典的0/1背包问题及其动态规划解法。
239 5
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
553 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
人工智能 算法 Java
【搜索算法】数字游戏(C/C++)
【搜索算法】数字游戏(C/C++)
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
172 1
下一篇
开通oss服务