算法提高 开灯游戏
2017-01-13 13:22
260 查看
问题描述
有9盏灯与9个开关,编号都是1~9。
每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的)。
具体如下:
第一个开关控制第二,第四盏灯;
第二个开关控制第一,第三,第五盏灯;
第三个开关控制第二,第六盏灯;
第四个开关控制第一,第五,第七盏灯;
第五个开关控制第二,第四,第六,第八盏灯;
第六个开关控制第三,第五,第九盏灯;
第七个开关控制第四,第八盏灯;
第八个开关控制第五,第七,第九盏灯;
第九个开关控制第六,第八盏灯。
开始时所有灯都是熄灭的,开关是关闭着的。要求按下若干开关后,使得只有4盏灯亮着。
输出格式
输出所有可能的方案,每行一个方案,每一行有9个字符,从左往右第i个字符表示第i个开关的状态("0"表示关闭,"1"表示打开),按字典序输出。下面的样例输出只是部分方案。
样例输出
000001011
000001110
000001111
有9盏灯与9个开关,编号都是1~9。
每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的)。
具体如下:
第一个开关控制第二,第四盏灯;
第二个开关控制第一,第三,第五盏灯;
第三个开关控制第二,第六盏灯;
第四个开关控制第一,第五,第七盏灯;
第五个开关控制第二,第四,第六,第八盏灯;
第六个开关控制第三,第五,第九盏灯;
第七个开关控制第四,第八盏灯;
第八个开关控制第五,第七,第九盏灯;
第九个开关控制第六,第八盏灯。
开始时所有灯都是熄灭的,开关是关闭着的。要求按下若干开关后,使得只有4盏灯亮着。
输出格式
输出所有可能的方案,每行一个方案,每一行有9个字符,从左往右第i个字符表示第i个开关的状态("0"表示关闭,"1"表示打开),按字典序输出。下面的样例输出只是部分方案。
样例输出
000001011
000001110
000001111
#include<stdio.h> void dengpao(int start,int a[],int arr[]) { if(start==1 && a[start]==1) { arr[2]=!arr[2]; arr[4]=!arr[4]; } if(start==2 && a[start]==1) { arr[1]=!arr[1]; arr[3]=!arr[3]; arr[5]=!arr[5]; } if(start==3 && a[start]==1) { arr[2]=!arr[2]; arr[6]=!arr[6]; } if(start==4 && a[start]==1) { arr[1]=!arr[1]; arr[5]=!arr[5]; arr[7]=!arr[7]; } if(start==5 && a[start]==1) { arr[2]=!arr[2]; arr[4]=!arr[4]; arr[6]=!arr[6]; arr[8]=!arr[8]; } if(start==6 && a[start]==1) { arr[3]=!arr[3]; arr[5]=!arr[5]; arr[9]=!arr[9]; } if(start==7 && a[start]==1) { arr[4]=!arr[4]; arr[8]=!arr[8]; } if(start==8 && a[start]==1) { arr[5]=!arr[5]; arr[7]=!arr[7]; arr[9]=!arr[9]; } if(start==9 && a[start]==1) { arr[6]=!arr[6]; arr[8]=!arr[8]; } } void panduan(int a[],int arr[]) { int sum=0,i; for(i=1;i<10;i++) { sum+=arr[i]; } if(sum==4) { for(i=1;i<10;i++) { printf("%d",a[i]); } printf("\n"); /* for(i=1;i<10;i++) { printf("%d",arr[i]); } printf("\n\n"); */ } } void fun(int start,int end,int a[],int arr[]) { int i,kaiguan[10],deng[10]; for(i=1;i<10;i++) { kaiguan[i]=a[i]; } for(i=1;i<10;i++) { deng[i]=arr[i]; } if(start>end) { panduan(kaiguan,deng); } else { for(i=0;i<=1;i++) { kaiguan[start]=i; dengpao(start,kaiguan,deng); fun(start+1,end,kaiguan,deng); } } } int main() { int kaiguan[10]={0};//0代表关闭,1代表开启 ,开关 int dengpao[10]={0};//0代表熄灭,1代表亮着 ,灯泡 fun(1,9,kaiguan,dengpao); return 0; }
相关文章推荐
- 算法提高 开灯游戏
- 蓝桥杯 算法提高 开灯游戏
- 算法提高开灯游戏
- 蓝桥杯 算法提高 盾神与积木游戏
- 算法提高 盾神与积木游戏
- 雷神3开方算法解析,游戏运行速度提高四倍。
- Java 算法提高 盾神与积木游戏
- 蓝桥杯 算法提高 开灯游戏
- 学VC 编游戏 重点算法解疑系列文档 - 走四方
- 关于二十四点游戏的编程思路与基本算法
- 正在考虑时下正流行的“数读”游戏的算法
- 游戏开发中的经典算法集锦之二
- 游戏寻路算法A*的实现
- 点灯游戏算法实现
- 一个flash游戏引发的思考【算法】
- js+ajax实现的A*游戏路径算法整理第1/2页
- 游戏开发中的经典算法集锦之一
- 《学VC 编游戏》重点算法解疑·走四方
- 彩色转灰度算法在游戏中的应用
- 游戏“尼姆棋”的算法讨论