5x5点灯游戏的答案
来源:互联网 发布:photoshop软件mac版本 编辑:程序博客网 时间:2024/06/10 01:27
点灯游戏:点一下鼠标,十字范围内的灯会明暗变换,最后都变亮或者熄灭。曾经公司有朋友在玩,我提议用编程解答该问题,第一个解答是穷举法,现在这个更快速一些,最后的答案竟然是有些初始值没有答案!
#include <iostream>
using namespace std;
#define N 5
int puzz[32] = ...{0, -1, -1, -1, -1, -1, -1, 2335592,
-1, -1, 7696412, -1, -1, 5690228, -1, -1,
-1, 3290808, -1, -1, -1, -1, 1152464, -1,
-1, -1,-1, 4671140, 6612428, -1, -1, -1,};
void int2Matrix(int value, int matrix[N][N])
...{
for (int i = 0; i < N; i++)
...{
for (int j = 0; j < N; j++)
...{
int shift = i * N + j;
matrix[i][j] = ((value >> shift) & 1);
}
}
}
int matrix2Int(int matrix[N][N])
...{
int result = 0;
int binaryMulti = 1;
for (int i = 0; i < N; i++)
...{
for (int j = 0; j < N; j++)
...{
result += matrix[i][j] * binaryMulti;
binaryMulti *= 2;
}
}
return result;
}
void showMatrix(int matrix[N][N])
...{
for (int i = 0; i < N; i++)
...{
for (int j = 0; j < N; j++)
...{
cout << matrix[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
void matrixTransform(int oldMatrix[N][N], int newMatrix[N][N])
...{
for (int i = 0; i < N; i++)
...{
for (int j = 0; j < N; j++)
...{
int total = oldMatrix[i][j]
+ oldMatrix[i - 1][j]
+ oldMatrix[i + 1][j]
+ oldMatrix[i][j - 1]
+ oldMatrix[i][j + 1];
if (i == 0)
...{
total -= oldMatrix[i - 1][j];
}
if (i == N -1)
...{
total -= oldMatrix[i + 1][j];
}
if (j == 0)
...{
total -= oldMatrix[i][j - 1];
}
if (j == N - 1)
...{
total -= oldMatrix[i][j + 1];
}
newMatrix[i][j] = total;
}
}
}
void matrixUpdate(int matrix[N][N], int mathod[N][N])
...{
for (int i = 0; i < N; i++)
...{
for (int j = 0; j < N; j++)
...{
matrix[i][j] = (matrix[i][j] + mathod[i][j]) % 2;
}
}
}
void algorithm(int matrix[N][N], int result[N][N])
...{
int temp[N][N] = ...{0};
int temp2[N][N] = ...{0};
int n[N][N] = ...{0};
for (int i = 0; i < N - 1; i++)
...{
for (int j = 0; j < N; j++)
...{
temp[N - 2 - i][j] = matrix[N - 1 - i][j];
n[N - 2 - i][j] = matrix[N - 1 - i][j];
}
matrixTransform(temp, temp2);
matrixUpdate(matrix, temp2);
for (j = 0; j < N; j++)
...{
temp[N - 2 - i][j] = 0;
}
}
int xx = matrix2Int(matrix);
int yy = matrix2Int(n);
if (puzz[xx] != -1)
...{
cout << "Answer:" << endl;;
int asnwer = puzz[xx] ^ yy;
int2Matrix(asnwer, temp);
showMatrix(temp);
}
else
...{
cout << "No Answer!" << endl;
}
}
int main()
...{
int input[N][N] = ...{
1,1,1,1,1,
1,1,1,1,1,
1,1,1,1,1,
1,1,1,1,1,
0,1,1,1,0};
int result[N][N];
cout << "input: " << endl;
showMatrix(input);
algorithm(input, result);
return 0;
}
using namespace std;
#define N 5
int puzz[32] = ...{0, -1, -1, -1, -1, -1, -1, 2335592,
-1, -1, 7696412, -1, -1, 5690228, -1, -1,
-1, 3290808, -1, -1, -1, -1, 1152464, -1,
-1, -1,-1, 4671140, 6612428, -1, -1, -1,};
void int2Matrix(int value, int matrix[N][N])
...{
for (int i = 0; i < N; i++)
...{
for (int j = 0; j < N; j++)
...{
int shift = i * N + j;
matrix[i][j] = ((value >> shift) & 1);
}
}
}
int matrix2Int(int matrix[N][N])
...{
int result = 0;
int binaryMulti = 1;
for (int i = 0; i < N; i++)
...{
for (int j = 0; j < N; j++)
...{
result += matrix[i][j] * binaryMulti;
binaryMulti *= 2;
}
}
return result;
}
void showMatrix(int matrix[N][N])
...{
for (int i = 0; i < N; i++)
...{
for (int j = 0; j < N; j++)
...{
cout << matrix[i][j] << " ";
}
cout << endl;
}
cout << endl;
}
void matrixTransform(int oldMatrix[N][N], int newMatrix[N][N])
...{
for (int i = 0; i < N; i++)
...{
for (int j = 0; j < N; j++)
...{
int total = oldMatrix[i][j]
+ oldMatrix[i - 1][j]
+ oldMatrix[i + 1][j]
+ oldMatrix[i][j - 1]
+ oldMatrix[i][j + 1];
if (i == 0)
...{
total -= oldMatrix[i - 1][j];
}
if (i == N -1)
...{
total -= oldMatrix[i + 1][j];
}
if (j == 0)
...{
total -= oldMatrix[i][j - 1];
}
if (j == N - 1)
...{
total -= oldMatrix[i][j + 1];
}
newMatrix[i][j] = total;
}
}
}
void matrixUpdate(int matrix[N][N], int mathod[N][N])
...{
for (int i = 0; i < N; i++)
...{
for (int j = 0; j < N; j++)
...{
matrix[i][j] = (matrix[i][j] + mathod[i][j]) % 2;
}
}
}
void algorithm(int matrix[N][N], int result[N][N])
...{
int temp[N][N] = ...{0};
int temp2[N][N] = ...{0};
int n[N][N] = ...{0};
for (int i = 0; i < N - 1; i++)
...{
for (int j = 0; j < N; j++)
...{
temp[N - 2 - i][j] = matrix[N - 1 - i][j];
n[N - 2 - i][j] = matrix[N - 1 - i][j];
}
matrixTransform(temp, temp2);
matrixUpdate(matrix, temp2);
for (j = 0; j < N; j++)
...{
temp[N - 2 - i][j] = 0;
}
}
int xx = matrix2Int(matrix);
int yy = matrix2Int(n);
if (puzz[xx] != -1)
...{
cout << "Answer:" << endl;;
int asnwer = puzz[xx] ^ yy;
int2Matrix(asnwer, temp);
showMatrix(temp);
}
else
...{
cout << "No Answer!" << endl;
}
}
int main()
...{
int input[N][N] = ...{
1,1,1,1,1,
1,1,1,1,1,
1,1,1,1,1,
1,1,1,1,1,
0,1,1,1,0};
int result[N][N];
cout << "input: " << endl;
showMatrix(input);
algorithm(input, result);
return 0;
}
- 5x5点灯游戏的答案
- 5X5点灯游戏
- 点灯游戏的模拟
- 点灯游戏
- 点灯游戏
- 点灯游戏算法实现
- 点灯游戏算法实现
- poj3984. 5X5的迷宫
- 点灯游戏--一个动态创建组件的示例
- 点灯游戏(还没看,先留着)
- 有趣的js点灯
- 点灯的总结
- X5的action应用
- X5内核的问题
- X5内核的问题
- 5X5矩阵调换!
- X5
- dm8168点灯的驱动代码
- 心
- 数组----------没看感觉明白,看了感觉晕,越看越晕
- ��������ƹ����
- 今日的收获
- 编码员的良心
- 5x5点灯游戏的答案
- 如何从桌面系统下安装WinCE平台下Pocket PC应用程序
- 没事也写写blog吧
- 电脑只能上QQ不能开网页
- Oracle系列:Record + PL/SQL表
- FRC阅读软件及打印
- 近日研究线性表的特性,做了相关的顺序表和链表的类
- 程序比赛小胜
- RobotToy 0.3发布