zoukankan      html  css  js  c++  java
  • poj 2965

    题意 : 4*4的+,-组成  每次能翻转一个点所在的行与列 求最小的翻转次数 使得矩阵全为-

    思路:暴力枚举

    #include<iostream>
    using namespace std;
    int map[5][5];
    int b;
    int n;
    int rsult[22];
    void slip(int i,int s[][4])//翻转
    {
        int k;
        int x=i/4;
        int y=i%4;
        s[x][y]=!s[x][y];
        for(k=0;k<4;k++)
        {
            s[x][k]=!s[x][k];
            s[k][y]=!s[k][y];
        }
    }
    bool all(int s[][4])//判断是否全为-号
    {
        for(int i=0;i<4;i++)
            for(int j=0;j<4;j++)
                if(s[i][j]==0)
                    return false;
        return true;
    }
    void output()//输出翻转次序
    {
        cout<<n<<endl;
        for(int i=0;i<n;i++)
            cout<<rsult[i]/4+1<<" "<<rsult[i]%4+1<<endl;
    }
    void judge()//每搜索到一个肯能解就判断一下
    {
        int i,j;
        int now[4][4];
        for(i=0;i<4;i++)
            for(j=0;j<4;j++)
            now[i][j]=map[i][j];
        for(i=0;i<n;i++)
            slip(rsult[i],now);
        if(all(now))
        {
            b=1;
            output();
        }
    }
    void dfs(int start,int count)//最先搜索到的解肯定是最优解
    {
        if(b) return ;
        if(count<=0)
        {
            judge();
            return ;
        }
        for(int i=start;i<=16-count;i++)
        {
            rsult[n-count]=i;
            dfs(i+1,count-1);
        }
    }
    int main()
    {
        int i,j;
        char str[5];
        int x,y;
        x=y=0;
        for(i=0;i<4;i++)
        {
            cin>>str;
            for(j=0;j<4;j++)
            {
                if(str[j]=='+')
                {
                    x++;
                    map[i][j]=0;
                }
                else 
                {
                    y++;
                    map[i][j]=1;
                }
            }
        }
        b=0;
        if(y==16)
            cout<<0<<endl;
        else
        for(i=1;i<=16;i++)
        {
            n=i;
            if(b) break;
            dfs(0,i);
        }
        return 0;
    }
  • 相关阅读:
    用struct定义函数
    三、OCTAVE画图
    二、OCTAVE 移动数据
    SQL复习
    Flink处理迟到的数据
    LeetCode题目学习
    CentOS7安装pycharm
    IntelliJ IDEA 刷题利器 LeetCode 插件
    Redis命令学习
    项目杂记
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/3749456.html
Copyright © 2011-2022 走看看