千家信息网

如何实现ACwing飞行员兄弟

发表于:2024-10-11 作者:千家信息网编辑
千家信息网最后更新 2024年10月11日,本篇内容介绍了"如何实现ACwing飞行员兄弟"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!#inc
千家信息网最后更新 2024年10月11日如何实现ACwing飞行员兄弟

本篇内容介绍了"如何实现ACwing飞行员兄弟"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

#include#include#include#include#define x first#define y secondusing namespace std;typedef pair PII;using namespace std;const int N = 5;char g[N][N],backup[N][N];int get(int x,int y){    return x*4+y;}// '+'表示闭合状态;'-'表示打开状态void turn_one(int x,int y){    if(g[x][y]=='+') g[x][y]='-';    else g[x][y]='+';}void turn_all(int x,int y){    for (int i=0;i<4;i++){        turn_one(x,i);        turn_one(i,y);    }    turn_one(x,y);}int main(){    //输入开始状态    for(int i=0;i<4;i++){        cin>>g[i];    }    vector res;    //枚举所有方案    for(int op=0;op<1<<16;op++){        vector temp;        //备份        memcpy(backup,g,sizeof g);        //进行操作        for(int i=0;i<4;i++)            for(int j=0;j<4;j++)                if(op>>get(i,j) & 1){                    temp.push_back({i,j});                    turn_all(i,j);                }        //判断是否全亮        bool hasclosed=false;        for(int i=0;i<4;i++)            for(int j=0;j<4;j++)                if(g[i][j]=='+')                    hasclosed=true;                            if(hasclosed==false){            if(res.empty() || res.size() >temp.size())                res=temp;        }        //还原        memcpy(g,backup,sizeof g);    }    cout<

"如何实现ACwing飞行员兄弟"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0