swustoj254,swust oj318
描述
熄灯是一款考验人的智力的益智游戏。你必须试着关掉所有的灯。
游戏玩法:当你关掉或打开一盏灯时,周围的灯(只包括上、下、左、右,不包括对角线的灯)会反方向反应。比如你周围的灯关了,你关了火或者开了中间那个,你周围的灯就会自动打开,反之亦然。
在“熄灯”中,有5行6列灯光。每个灯可以先关或开。你的目标是关掉所有的灯。
投入
第一行包含一个T,表示玩了多少局。
对于每个游戏,输入一个5行6列的矩阵,表示每个灯的初始状态。0表示灯先关,1表示灯先开。
输出
针对每一个游戏,输出一个可以关闭所有灯的方案,包括一个5行6列的矩阵,其中0代表已经按下这个灯的按钮,1代表没有按下这个灯的按钮。每组输出多输出一个空行。
原始样本输入
2
0 1 1 0 1 0
1 0 0 1 1 1
0 0 1 0 0 1
1 0 0 1 0 1
0 1 1 1 0 0
0 0 1 0 1 0
1 0 1 0 1 1
0 0 1 0 1 1
1 0 1 1 0 0
0 1 0 1 0 0
原始样本输出
1 0 1 0 0 1
1 1 0 1 0 1
0 0 1 0 1 1
1 0 0 1 0 0
0 1 0 0 0 0
1 0 0 1 1 1
1 1 0 0 0 0
0 0 0 1 0 0
1 1 0 1 0 1
1 0 1 1 0 1
【含义】如题所示
【解析】只需要暴力枚举每一行(列)的状态,然后根据第一行推导出后面各行的状态,最后确定是否满足条件。请注意,这是输出印刷方案。
[交流代码]
#包含位/标准数据。h
使用命名空间std
int maze[5][6];
int b[5][6];
int ans[5][6];
空按(int x,int y)
{
ans[x][y]=1;
b[x][y]=1-b[x][y];
if(x ^ 0)b[x-1][y]=1-b[x-1][y];
if(x ^ 4)b[x ^ 1][y]=1-b[x ^ 1][y];
if(y 0)b[x][y-1]=1-b[x][y-1];
if(y 5)b[x][y 1]=1-b[x][y 1];
}
int main()
{
int T;
scanf(%d ,T);
while(T -)
{
for(int I=0;i5;我)
{
for(int j=0;j 6;j)
{
scanf(%d ,maze[I][j]);
}
}
for(int s=0;s(16);s)
{
memset(ans,0,sizeof(ans));
for(int I=0;i5;我)
{
for(int j=0;j 6;j)
{
b[i][j]=迷宫[I][j];
}
}
for(int I=0;i6;我)
{
if(s (1 i))按(0,I);
}
for(int I=1;i5;我)
{
for(int j=0;j 6;j)
{
if(b[i-1][j]==1)按(I,j);
}
}
bool fuck=true
for(int I=0;i6;我)
{
if(b[4][I]==1)fuck=false;
}
如果(操)
{
for(int I=0;i5;我)
{
for(int j=0;j 5;j)
{
printf(%d ,ans[I][j]);
}
printf(%d\n ,ans[I][5]);
}
打破;
}
}
printf( \ n );
}
返回0;
}
转载请联系作者授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。