程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj1753

poj1753

編輯:C++入門知識

#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<=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;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved