能力值:
( LV1,RANK:0 )
|
-
-
2 楼
需要C++代码或lua代码
|
能力值:
( LV15,RANK:2459 )
|
-
-
3 楼
不需要什么算法啊,貌似最多23次点击就可以了
void turn(int x, int y, unsigned char arr[5][5])
{
arr[y][x] ^= 1;
if (x != 0)
{
arr[y][x-1] ^= 1;
}
if (x != 4)
{
arr[y][x+1] ^= 1;
}
if (y != 0)
{
arr[y-1][x] ^= 1;
}
if (y != 4)
{
arr[y+1][x] ^= 1;
}
}
int solve5(unsigned char arr[5][5], unsigned char *result)
{
int i,j;
int steps = 0;
//从第二行开始遍历,上一行是1则点一下,这样最多点20次可以把前四行都变0
for (j=1;j<5;j++)
{
for (i=0;i<5;i++)
{
if (arr[j-1][i])
{
turn(i, j, arr);
result[steps] = j * 5 + i;
steps++;
}
}
}
//检查第5行,如果有某位置左右都是1,则该位置点一下,最多把上一行0变1,却把第5行至少2个1变0
for (i=1;i<4;i++)
{
if (arr[4][i-1] && arr[4][i+1])
{
turn(i, j, arr);
result[steps] = j * 5 + i;
steps++;
}
}
return steps;
}
void test_x5()
{
unsigned char result[24];
int steps;
int i;
unsigned char arr[5][5] = {
{0,1,0,1,0},
{1,0,1,1,0},
{0,1,0,1,0},
{1,1,1,1,0},
{0,0,1,0,0}
}; //0黑1白
steps = solve5(arr, result);
printf("result = {");
for (i=0;i<steps;i++)
{
printf("%d,",result[i]);
}
printf("}\n");
}
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
某三?
最后于 2020-12-25 19:41
被CNLouisLiu编辑
,原因:
|
|
|