畫家問題

http://cxsjsxmooc.openjudge.cn/test/Y/

代碼

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using std::cin;
using std::cout;
using std::endl;
int map[20][20];//草稿
int copy[20][20];//原始記錄
int line[20];//第一行
char col[20];//輸入緩沖區(qū)
int n;
int min;
int count;
void draw(int x,int y){//畫畫并且增加次數(shù)
    map[x][y]=!map[x][y];
    map[x-1][y]=!map[x-1][y];
    map[x+1][y]=!map[x+1][y];
    map[x][y-1]=!map[x][y-1];
    map[x][y+1]=!map[x][y+1];
    count++;
}
bool guess(){
    //從第二行開始 判斷每個點上邊的點是否為黃色 如果不是黃色 則涂該點
    for(int i=2; i<=n; i++)
        for(int j=1; j<=n; j++)
            if(map[i-1][j] == 0)
                draw(i,j);


    //判斷最后一行是否都為黃色 如果是則記錄次數(shù) 否則提交失敗
    for(int k=1; k<=n; k++)
        if(map[n][k] != 1)
            return false;
    if(count < min)
        min = count;
    return true;
}
void getLine(int k){
    //二進制枚舉第一行
    int j=n;
    while(j>0){
        line[j]=k%2;
        k/=2;
        j--;
    }
}
int main(){
    int w;
    cin>>w;
    while(w--){
        cin>>n;
        min=n*n+1;
        for (int i = 1; i <=n; ++i) {
            scanf("%s",col);
            //一行一行掃描
            for (int j = 1; j <=n ; ++j) {
                if(col[j-1]=='w'){
                    copy[i][j]=0;
                }
                else{
                    copy[i][j]=1;
                }
            }
        }
        //開始枚舉
        for (int k = 0; k <pow(2,n) ; ++k) {
            count=0;
            memcpy(map,copy, sizeof(copy));
            getLine(k);
            //枚舉第一行
            for (int i = 1; i <=n ; ++i) {
                if(line[i]==1){
                    draw(1,i);
                }
            }
            guess();
        }
        if(min!=n*n+1){
            cout<<min<<endl;
        }
        else{
            cout<<"inf"<<endl;
        }
    }
    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,563評論 19 139
  • 一、實驗目的 學習使用 weka 中的常用分類器,完成數(shù)據(jù)分類任務。 二、實驗內容 了解 weka 中 explo...
    yigoh閱讀 8,853評論 5 4
  • 1.本書講的是如何建立個人影響力,影響力就是有創(chuàng)意地表現(xiàn)自己; 2.分別按照CREAT各因子闡釋,并說明如何行動,...
    幽明閱讀 687評論 0 1
  • 連續(xù)更了三天的帖子,不小心爬上了一次:簡書首頁&&手繪公眾號,夠我得瑟一下了。(hh......hhh!)今天文末...
    Double_Hui閱讀 1,547評論 33 47
  • 一、monkeyrunner簡介 腳本工具,有三個模塊:monkeyrunner、monkeydevice、mon...
    兼葭dx閱讀 336評論 0 0

友情鏈接更多精彩內容