广度优先搜索-Shredding Company(算法基础 第8周)

问题描述:
广度优先搜索-Shredding Company(算法基础 第8周)_第1张图片
广度优先搜索-Shredding Company(算法基础 第8周)_第2张图片

分析
没想到怎么用广搜做呀,直接枚举了,做法跟熄灯问题 一样。
源码

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int field[5][6],filp[5][6];

/* 推测验证过程: 根据第一行猜测 */
int guess() {    
    //根据filp第1行和field数组,计算press其他行的值
    for (int r=1; r<4; r++) {
        for (int c=1; c<=4; c++) {
            filp[r+1][c]=(field[r][c]+filp[r][c]+filp[r-1][c]+filp[r][c-1]+filp[r][c+1])%2;
        }
    }
    //判断所计算的press数组能否将最后一行全变为黄色0
    for(int c=1; c<=4; c++) {
        if ((filp[4][c-1]+filp[4][c]+filp[4][c+1]+filp[3][c])%2 != field[4][c]) {
            return 1001;            
        }
    }
    //算出需要的步数
    int steps=0;
    for (int r=1; r<=4; r++) {
        for (int c=1; c<=4; c++) {
            if (filp[r][c]==1) {
                steps++;
            }
        }
    }
    return steps;
}

/* 枚举过程: 对press第1行的元素press[1][1]~press[1][6]的各种取值进行枚举 */
int enumerate() {
    int minsteps=1001;
    int steps=0;
    int c;
    while (filp[1][5]<1){
        steps = guess();
        if (steps<minsteps){
            minsteps = steps;
        }       
        filp[1][1]++;
        c=1;
        while(filp[1][c]>1) {
            filp[1][c]=0;
            c++;
            filp[1][c]++;
        }
    }
    return minsteps;
}

int main() {
    //初始化
    memset(field, 0, sizeof(field));
    memset(filp, 0, sizeof(filp));
    //输入数据
    char color;
    for (int i=1; i<=4; i++) {
        for (int j=1; j<=4; j++) {
            cin >> color;
            field[i][j] = color=='b' ? 0:1;
        }
    }
    int minsteps_first = enumerate();

    memset(filp, 0, sizeof(filp));
    for (int i=1; i<=4; i++) {
        for (int j=1; j<=4; j++) {
            field[i][j] = 1-field[i][j];
        }
    }
    int minsteps_second = enumerate();

    int minsteps=min(minsteps_first, minsteps_second);
    if (minsteps>1000){
        cout << "Impossible" << endl;
    }
    else {
        cout << minsteps << endl;
    }
}

你可能感兴趣的:(广度优先搜索-Shredding Company(算法基础 第8周))