The Pilots Brothers‘ refrigerator高效贪心算法
创始人
2024-03-18 16:04:03
0

     Description

The game “The Pilots Brothers: following the stripy elephant” has a quest where a player needs to open a refrigerator.

There are 16 handles on the refrigerator door. Every handle can be in one of two states: open or closed. The refrigerator is open only when all handles are open. The handles are represented as a matrix 4х4. You can change the state of a handle in any location [i, j] (1 ≤ i, j ≤ 4). However, this also changes states of all handles in row i and all handles in column j.

The task is to determine the minimum number of handle switching necessary to open the refrigerator.

Input

The input contains four lines. Each of the four lines contains four characters describing the initial state of appropriate handles. A symbol “+” means that the handle is in closed state, whereas the symbol “−” means “open”. At least one of the handles is initially closed.

      Output

The first line of the input contains N – the minimum number of switching. The rest N lines describe switching sequence. Each of the lines contains a row number and a column number of the matrix separated by one or more spaces. If there are several solutions, you may give any one of them.

      Sample Input

-+--
----
----
-+--

Sample Output

6
1 1
1 3
1 4
4 1
4 3
4 4

高效贪心算法

AC代码

 
#include
#include
#include
#includeusing namespace std;int num=0x3f3f3f3f;
int a[10][10],b[10][10],flag;
int fanzhuan(int x,int y)
{
a[x][y]=!a[x][y];
for(int i=0; i<4; i++)
a[x][i]=!a[x][i];for(int j=0; j<4; j++)
a[j][y]=!a[j][y];
}
int panduan()
{
for(int i=0; i<4; i++)
for(int j=0; j<4; j++)
if(!a[i][j])
return 0;
return 1;
}
struct node
{
int a,b;
} p[20];
void DFS(int x,int y,int ans)//将所有的num步的情况都跑一遍判断是否有符合的
{
if(num==ans)
{
flag=panduan();
return ;
}if(flag||x>=4||y>=4)
return ;int fy=(y+1)%4; //按行移动的
int fx=x+(y+1)/4;fanzhuan(x,y);
DFS(fx,fy,ans+1);
p[ans].a=x;
p[ans].b=y;
fanzhuan(x,y);//原路返回
DFS(fx,fy,ans);}
int main()
{
string s[4];
while(cin>>s[0])
{
for(int i=1; i<4; i++)
cin>>s[i];
for(int i=0; i<4; i++)
for(int j=0; j<4; j++)//格式转换
if(s[i][j]=='+')
a[i][j]=0;
else
a[i][j]=1;
flag=0;
for(int i=0; i<=16; i++)//枚举
{
num=i;
DFS(0,0,0);
if(flag)
break;
}
cout<                
            

相关内容

热门资讯

以兼职为名“养号倒号”牟利,犯... 极目新闻通讯员 吴焱 何宏业 一起看似普通的网络兼职招募,背后却暗藏指使他人提供个人信息、批量注册并...
富安娜理财纠纷案一审落槌:中信... 12月25日晚间,家纺龙头企业富安娜(002327.SZ)披露了与中信证券固定收益类理财产品“富安1...
光明地产涨停!政策利好叠加资产... 交易所数据显示,光明地产开盘报3.24元,随后整体呈现震荡上行的走势,期间虽有短暂回调,但上行动能持...
董事起诉、演出取消……特朗普“... 新华社北京12月26日电 位于美国首都华盛顿的标志性文化机构“肯尼迪表演艺术中心”近日因更名为“特朗...
李旻律师:央视曝光“估吗”等手... 12月21日,中央广播电视总台新闻频道《朝闻天下》栏目以6分多钟的篇幅,曝光“估吗”等手机回收平台、...
三部门发布2025年劳动法律监... 12月25日,从全国总工会了解到,全国总工会与最高人民法院、最高人民检察院近日联合发布10个劳动法律...
原创 农... 农村青年犯罪率上升:北漂发小为何走上不归路? 在华北某县的法院庭审现场,26岁的张强低头认罪的模样,...
瑞莱智慧申请政策文件知识图谱构... 国家知识产权局信息显示,北京瑞莱智慧科技有限公司申请一项名为“政策文件的知识图谱构建方法、系统及电子...