点灯游戏求解算法(DFS)——老子表示不理解!也不看了!

来源:互联网 发布:ae插件下载mac 编辑:程序博客网 时间:2024/06/02 07:32
#include<cstdio>#include<cstring>const int Row=4,Col=4;int status[Row][Col]={    1,0,0,0,    0,1,1,1,    0,1,1,1,    0,1,1,1};int minstep=200;int nowstep=0;int steps[200];int beststeps[200];void click(int pos){    int r=pos/4,c=pos%4;    status[r][c]=!status[r][c];    for(int i=0;i!=Row;i++)        status[i][c]=!status[i][c];    for(int i=0;i!=Col;i++)        status[r][i]=!status[r][i];    steps[pos]=!steps[pos];}bool win(){    for(int i=0;i<Row;i++)    {     for(int j=0;j<Col;j++)        if(!status[i][j])            return false;    }    return true;}void DFS(int step){    if(step==Row*Col) return;    if(nowstep>=minstep) return;    if(win()) {        minstep=nowstep;memcpy(beststeps,steps,sizeof(beststeps));return;}        DFS(step+1);    nowstep++;    click(step);    DFS(step+1);    nowstep--;    click(step);    }int main(){    DFS(0);    printf("%d\n",minstep);    for(int i=0;i<Row*Col;i++)        if(beststeps[i])            printf("(%d,%d) ",i/4+1,i%4+1);}

0 0