POJ2965-The Pilots Brothers' refrigerator

来源:互联网 发布:mysql 删除外键 编辑:程序博客网 时间:2024/05/21 08:40

POJ1753思想基本一致,刚开始用栈记录路径,结果超时,后来想用两个数组覆盖路径即可。

#include <cstdio>#include <cstring>#include <algorithm>#include <stack>#include <cmath>#include <set>#include <iostream>const double PI=acos(-1.0);using namespace std;typedef long long ll;bool str[6][6];int Row[20],Col[20],k;int flag,step;bool judge_all(){    for(int i=1;i<5;i++) {        for(int j=1;j<5;j++) {            if(str[i][j]!=true) return false;        }    }    return true;}void flip(int row,int col){    for(int i=1;i<5;i++) {        str[row][i]=!str[row][i];        str[i][col]=!str[i][col];    }    str[row][col]=!str[row][col];}void dfs(int row,int col,int deep){    if(deep==step) {        if(judge_all()) {            flag=1;        }        return ;    }    if(row>4||flag) {        return ;    }    flip(row,col);    Row[deep]=row;    Col[deep]=col;    if(col<4)        dfs(row,col+1,deep+1);    else        dfs(row+1,1,deep+1);    flip(row,col);    if(col<4)        dfs(row,col+1,deep);    else        dfs(row+1,1,deep);    return ;}int main(){    for(int i=1;i<5;i++) {        for(int j=1;j<5;j++) {            char temp;            cin>>temp;            if(temp=='-') str[i][j]=true;            else str[i][j]=false;        }    }    flag=0;    for(step=0;step<=16;step++) {        dfs(1,1,0);        if(flag) break;    }    printf("%d\n",step);    for(int i=0;i<step;i++) {        printf("%d %d\n",Row[i],Col[i]);    }    return 0;}


0 0
原创粉丝点击