• POJ2965


    #include <stdio.h>
    char map[4][4];
    int map1[4][4];
    int map2[4][4];
    int num[16];
    int min=1000,n;
    int shu[20];
    int shu1[20];
    int len;
    void bian(int x , int y)
    {
        for(int i=0;i<4;i++)
        {
            if(i!=y)
            {
                if(map2[x][i]==0)
                    map2[x][i]=1;
                else
                    map2[x][i]=0;
            }
                if(map2[i][y]==0)
                    map2[i][y]=1;
                else
                    map2[i][y]=0;
        }
    }
    int safe()
    {
        int r=1;
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                if(map2[i][j]==1)
                {
                    r=0;
                    break;
                }
            }
            if(r==0)
                break;
        }
        return r;
    }
    void  dfs(int step)
    {
        if(step==16)
        {
            n=0;
            len=0;
            int k=0;
            for(int i=0;i<4;i++)
                for(int j=0;j<4;j++)
                    map2[i][j]=map1[i][j];
            for(int i=0;i<16;i++)
            {
                if(num[i]==1)
                {
                    bian(i/4,i%4);
                    shu[n]=i/4;
                    shu1[n]=i%4;
                    n++;
                    if(n>min)
                        return;
                }
            }
            if(safe())
            {
                if(n<min)
                {
                    min=n;
                    printf("%d
    ",min);
                    for(int i=0;i<min;i++)
                    printf("%d %d
    ",shu[i]+1,shu1[i]+1);
                }
            }
            return ;
        }
        for(int i=0;i<2;i++)
        {
            num[step]=i;
            dfs(step+1);
        }
    }
    int main()
    {
        freopen("in.txt","r",stdin);
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                scanf("%c",&map[i][j]);
                if(map[i][j]=='+')
                    map1[i][j]=1;
                if(map[i][j]=='-')
                    map1[i][j]=0;            
            }
            getchar();
        }
        dfs(0);
        return 0;
    }
    
  • 相关阅读:
    STM32的低功耗模式
    C语言的面向对象技术
    SDIO学习
    读十倍效率开发者有感
    三极管
    压敏电阻
    freertos之任务
    tsar采集数据原理
    NTP学习路线
    使用awk提取字符串中的数字或字母
  • 原文地址:https://www.cnblogs.com/452035305qq/p/6252167.html
Copyright © 2020-2023  润新知