当前位置:编程学习 > C/C++ >>

poj1753

#include <iostream>  
#include <stdio.h>  
#include <memory.h>  
using namespace std; 
 
int array[5][5],t[5][5]; 
int bit[5]; 
 
void Getbit(int i) 

    int t=4; 
    while(i!=0) 
    { 
        bit[t]=i%2; 
        i=i/2; 
        t--; 
    } 

 
void flip(int i,int j) 

    array[i][j]=array[i][j]>0?0:1; 
    if(i-1>=1) 
        array[i-1][j]=array[i-1][j]>0?0:1; 
    if(i+1<=4) 
        array[i+1][j]=array[i+1][j]>0?0:1; 
    if(j-1>=1) 
        array[i][j-1]=array[i][j-1]>0?0:1; 
    if(j+1<=4) 
        array[i][j+1]=array[i][j+1]>0?0:1; 

 
int main() 

    int i,j,sum,k; 
    int cnt,min,stand; 
    char ch; 
    for(i=1;i<=4;i++) 
    { 
        for(j=1;j<=4;j++) 
        { 
            scanf("%c",&ch); 
            if(ch=='w') 
            { 
                array[i][j]=1; 
                t[i][j]=1; 
            } 
            else 
            { 
                array[i][j]=0; 
                t[i][j]=0; 
            } 
        } 
        getchar(); 
    } 
    min=16;  //1  
    for(k=0;k<16;k++) 
    { 
        cnt=0; 
        sum=0; 
        memset(bit,0,sizeof(bit)); 
        Getbit(k); 
 
        for(i=1;i<=4;i++) 
        { 
            if(bit[i]==1) 
            { 
                flip(1,i);  //0 1  
                cnt++; 
            } 
            sum+=array[1][i];  //01  
        } 
 
        if(sum>2)   stand=1; 
        else    stand=0; 
 
        for(i=1;i<=3;i++) 
            for(j=1;j<=4;j++) 
            { 
                if(array[i][j]!=stand) 
                { 
                    flip(i+1,j); 
                    cnt++; 
                } 
            } 
 
        for(i=1;i<=4;i++) 
            if(array[4][i]!=stand) 
            { 
                printf("Impossible\n"); 
                return 0; 
            } 
        if(cnt==0) 
        { 
            printf("0\n"); 
            return 0; 
        } 
        else 
        { 
            if(cnt<min) 
                min=cnt; 
            for(i=1;i<=4;i++) 
                for(j=1;j<=4;j++) 
                    array[i][j]=t[i][j]; 
        } 
    } 
    printf("%d\n",min); 
    return 0; 

#include <iostream>
#include <stdio.h>
#include <memory.h>
using namespace std;

int array[5][5],t[5][5];
int bit[5];

void Getbit(int i)
{
    int t=4;
    while(i!=0)
    {
        bit[t]=i%2;
        i=i/2;
        t--;
    }
}

void flip(int i,int j)
{
    array[i][j]=array[i][j]>0?0:1;
    if(i-1>=1)
        array[i-1][j]=array[i-1][j]>0?0:1;
    if(i+1

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,