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;
}
}
}
}
标签:熄灯,lights,int,oj1222,c++,source,result,line,include 来源: https://blog.csdn.net/weixin_54135814/article/details/118673230