第12讲-简单算法实例

课件:(下载

【ZOJ1354】Extended Lights Out

复制代码
#include <iostream>
#include
<cstring>
using namespace std;
#define ROW 5
#define COL 6

int lights[ROW][COL];
int ans[ROW][COL];
int temp[ROW][COL];

void Read()
{
for( int i=0;i<ROW;i++ )
{
for( int j=0;j<COL;j++ )
{
cin
>> lights[i][j];
}
}
}

void Init()
{
/*for( int i=0;i<ROW;i++ )
{
for( int j=0;j<COL;j++ )
{
temp[i][j] = lights[i][j];
ans[i][j] = 0;
}
}
*/
memcpy(temp,lights,
sizeof(lights));
memset(ans,
0,sizeof(ans));
}

void Press(int x,int y)
{
ans[x][y]
=1;
temp[x][y]
= 1-temp[x][y];
if( x>0 ) temp[x-1][y] = 1-temp[x-1][y];
if( x<ROW-1 ) temp[x+1][y] = 1-temp[x+1][y];
if( y>0 ) temp[x][y-1] = 1-temp[x][y-1];
if( y<COL-1 ) temp[x][y+1] = 1-temp[x][y+1];
}

bool OtherRows()
{
for( int i=0;i<ROW-1;i++ )
{
for( int j=0;j<COL;j++ )
{
if( temp[i][j]==1 )
Press(i
+1,j);
}
}
for( int k=0;k<COL;k++ )
{
if( temp[ROW-1][k]==1 )
return false;
}
return true;
}

void Print(int n)
{
cout
<<"PUZZLE #"<<n<<endl;
for( int i=0;i<ROW;i++ )
{
for(int j=0;j<COL;j++)
{
cout
<<ans[i][j];
if( j<COL-1 )
cout
<< " ";
}
cout
<<endl;
}
}

void FirstRow(int n)
{
for( int i=0;i<64;i++ )
{
Init();

for(int j=0;j<COL;j++)
{
if( i&(1<<j) )
{
Press(
0,j);
}
}

if(OtherRows())
{
Print(n);
return;
}
}
}

int main()
{
int n;
cin
>> n;
for(int i=1;i<=n;i++ )
{
Read();
FirstRow(i);
}
return 0;
}
复制代码

 

posted @   屠一刀  阅读(257)  评论(0编辑  收藏  举报
编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
· 程序员常用高效实用工具推荐,办公效率提升利器!
点击右上角即可分享
微信分享提示