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-12-23DevExpress 怎么实现右键菜单(Context Menu)显示中文?-icode9专业技术文章分享
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享
- 2024-12-22el-tabs 组件只被引用了一次,但有时会渲染两次是什么原因?-icode9专业技术文章分享
- 2024-12-22wordpress有哪些好的安全插件?-icode9专业技术文章分享
- 2024-12-22wordpress如何查看系统有哪些cron任务?-icode9专业技术文章分享
- 2024-12-21Svg Sprite Icon教程:轻松入门与应用指南
- 2024-12-20Excel数据导出实战:新手必学的简单教程
- 2024-12-20RBAC的权限实战:新手入门教程
- 2024-12-20Svg Sprite Icon实战:从入门到上手的全面指南
- 2024-12-20LCD1602显示模块详解