c++ 北大oj1222 熄灯问题
2021/7/12 14:05:48
本文主要是介绍c++ 北大oj1222 熄灯问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include <bitset>
#include <memory>
#include <cstring>
#include <iostream>
using namespace std;
bitset<6> source[5], result[5], lights[5];
bitset<6> line; //000000~111111 0-2^6-1
void input_source() /*原始数据输入函数*/
{
int x;
for(int i=0; i<5; i++)
for(int j=0; j<6; j++)
{
cin >> x;
source[i][j]=x;
}
}
void output_result() /*输出结果函数*/
{
for(int i=0; i<5; i++)
{
for(int j=0; j<6; j++)
cout << result[i][j] << " ";
cout << endl;
}
}
int main() /*主函数*/
{
int t=0;
cin >> t; /*输入要输入的个数*/
for(int i=0; i<t; i++)
{
input_source();
for(int n=0; n<64; n++)
{
memcpy(lights,source,sizeof(source)); /*把原始数据赋给新数组方便操作*/
line = n;
for(int k=0; k<5; k++)
{
result[k] = line; /*从上往下,保证下一行使上一行全部为0,即熄灯状态*/
for(int j=0; j<6; j++)
{
if (line.test(j)) /*判断是否为0*/
{
lights[k][j].flip();
lights[k+1][j].flip();
if(j>0) lights[k][j-1].flip(); /*不是最左边的话左边也要翻转*/
if(j<5) lights[k][j+1].flip(); /*不是最右边的话右边也要翻转*/
}
}
line = lights[k]; /*把使上一行为0的下一行赋给line,重复上述操作*/
}
if(lights[4].none())
{
cout << "PUZZLE #" << i+1 <<endl;
output_result(); /*输出最终结果*/
break;
}
}
}
}
这篇关于c++ 北大oj1222 熄灯问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19WebSocket入门指南:轻松搭建实时通信应用
- 2024-11-19Nacos安装资料详解:新手入门教程
- 2024-11-19Nacos安装资料:新手入门教程
- 2024-11-19升级 Gerrit 时有哪些注意事项?-icode9专业技术文章分享
- 2024-11-19pnpm是什么?-icode9专业技术文章分享
- 2024-11-19将文件或目录压缩并保留到指定的固定目录怎么实现?-icode9专业技术文章分享
- 2024-11-19使用 tar 命令压缩文件并且过滤掉某些特定的目录?-icode9专业技术文章分享
- 2024-11-18Nacos安装入门教程
- 2024-11-18Nacos安装入门:轻松掌握Nacos服务注册与配置管理
- 2024-11-18Nacos配置中心入门:新手必读教程