解题思路:

只要你,够暴力,我就让你 * * *

注意事项:

参考代码:

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>

using namespace std;

bool light[9];

vector<string> ans;

int a[][9] = {
	{0,0,0,0,0,0,0,0,1},
	{0,0,0,0,0,0,0,1,1},
	{0,0,0,0,0,0,1,1,1},
	{0,0,0,0,0,1,1,1,1},
	{0,0,0,0,1,1,1,1,1},
	{0,0,0,1,1,1,1,1,1},
	{0,0,1,1,1,1,1,1,1},
	{0,1,1,1,1,1,1,1,1},
	{1,1,1,1,1,1,1,1,1},
};

bool check()
{
	int count = 0;
	for (int j = 0; j < 9; j++)
		if (light[j])
			count += 1;
	if (count == 4)
		return true;
	else
		return false;
}

void solve()
{
	for (int i = 0; i < 9; i++)
	{
		do
		{
			for (int j = 0; j < 9; j++)
			{
				if (a[i][j] == 1)
				{
					if (j == 0)
					{
						light[1] = !light[1];
						light[3] = !light[3];
					}
					if (j == 1)
					{
						light[0] = !light[0];
						light[2] = !light[2];
						light[4] = !light[4];
					}
					if (j == 2)
					{
						light[1] = !light[1];
						light[5] = !light[5];
					}
					if (j == 3)
					{
						light[0] = !light[0];
						light[4] = !light[4];
						light[6] = !light[6];
					}
					if (j == 4)
					{
						light[1] = !light[1];
						light[3] = !light[3];
						light[5] = !light[5];
	  					light[7] = !light[7];
					}
					if (j == 5)
					{
						light[2] = !light[2];
						light[4] = !light[4];
						light[8] = !light[8];
					}
					if (j == 6)
					{
	  					light[3] = !light[3];
	  					light[7] = !light[7];
					}
					if (j == 7)
					{
						light[4] = !light[4];
						light[6] = !light[6];
						light[8] = !light[8];
					}
					if (j == 8)
					{
						light[5] = !light[5];
	  					light[7] = !light[7];
					}
				}
			}
			
			if (check())
			{
//				for (int j = 0; j < 9; j++)
//					cout << a[i][j];
//				cout << endl;
				string s;
				for (int j = 0; j < 9; j++)
					s += '0' + a[i][j];
				ans.push_back(s);
			}
			
			for (int k = 0; k < 9; k++)
				light[k] = false;
			
		} while (next_permutation(a[i], a[i] + 9));
	}
	
	sort(ans.begin(), ans.end());
	
	for (vector<string>::iterator it = ans.begin(); it < ans.end(); it++)
		cout << *it << endl;
	
}

int main()
{
	solve();
	return 0;
}


点赞(1)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论