poj2965

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int a[4][4];
int x[17]= {0},X[17]= {0};
int y[17]= {0},Y[17]= {0};
int d=0,e=-1;
void build()
{
    memset(a,0,sizeof(a));
    for(int i=0; i<4; i++)
    {
        for(int j=0; j<4; j++)
        {
            if(getchar()=='-')
                a[i][j]=1;
        }
        getchar();
    }
}
void filp(int s)
{
    int x=s/4;
    int y=s%4;
    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];
    a[x][y]=!a[x][y];
}
bool complete()
{
    for(int i=0; i<4; i++)
    {
        for(int j=0; j<4; j++)
        {
            if(a[i][j]!=1)
                return false;
        }
    }
    return true;
}
void dfs(int s,int b)
{
    if(complete())
    {
        if(e<d)
        {
            for(int i=0; i<d; i++)
            {
                X[i]=x[i];
                Y[i]=y[i];
            }
            e=d;
        }
        return;
    }
    if(s>=16)
        return;
    dfs(s+1,b);
    filp(s);
    x[d]=s/4+1;
    y[d]=s%4+1;
    d++;
    dfs(s+1,b+1);
    filp(s);
    d--;
    return;
}
int main()
{
    build();
    dfs(0,0);
    printf("%d\n",e);
    for(int i=0; i<e; i++)
        printf("%d %d\n",X[i],Y[i]);
    return 0;
}

  

  

原文地址:https://www.cnblogs.com/lhsghhqgmzy/p/10686665.html