UVa_11464_Even Parity_机智地搜索
来源:互联网 发布:sacd播放软件 编辑:程序博客网 时间:2024/04/28 05:20
既然自己那么水,看书的时候遇到不会的就先跳过吧。
今天再次见到队友直接变成了一条狗。
题意:
给你一个n*n的01矩阵,要求把尽量少的0变成1,使得每个元素的上下左右元素(如果存在的话)之和均为偶数。
Input:
第一行为数据组数t。每组数据第一行为正整数n(1<=n<=15);接下来n行包含n个非0即1的整数,相邻整数之间用一个空格隔开。
Output:
对于每组数据,输出被改变的元素的最小个数,无解则输出-1。
朴素的想法就是枚举每一个点是否从0变成1,但15*15个元素深搜枚举要2^15,太大,考虑回溯法。
从左上往右下遍历的话,显然右下的元素会受到左上元素的影响,那么如果第一行已经确定了,易证下面的元素都是确定的,因此只需要枚举第一行的所有情况,然后就可以在多项式时间内算出整个矩阵或者是求出这种情况不可能。
用dfs实现,先遍历第一行的情况,再算出矩阵,边算边判断。
代码如下:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cmath>using namespace std;#define mxn 20int a[mxn][mxn];int n;bool flag[mxn][mxn];void change(int i,int j){if(i)flag[i-1][j]=1-flag[i-1][j];if(j)flag[i][j-1]=1-flag[i][j-1];if(i!=n-1)flag[i+1][j]=1-flag[i+1][j];if(j!=n-1)flag[i][j+1]=1-flag[i][j+1];}int dfs(int x,int ans){if(x==n){//cout<<"hehe "<<endl;//for(int i=0;i<n;++i)//cout<<a[0][i]<<" ";//cout<<endl;memset(flag,0,sizeof(flag));for(int i=0;i<n;++i)for(int j=0;j<n;++j){int tem=0;if(j!=n-1)tem+=a[i][j+1];if(i!=n-1)tem+=a[i+1][j];if(i)tem+=a[i-1][j];if(j)tem+=a[i][j-1];flag[i][j]=tem%2;}for(int i=0;i<n-1;++i)for(int j=0;j<n;++j){if(!flag[i][j])continue;if(!a[i+1][j]){change(i+1,j);++ans;}else return -1;}for(int i=0;i<n;++i)if(flag[n-1][i])return -1;//cout<<"ans "<<ans<<endl;return ans;}int ret=dfs(x+1,ans);if(a[0][x]==1)return ret;a[0][x]=1-a[0][x];//cout<<"x: "<<x<<endl;int tem=dfs(x+1,ans+1);if(ret==-1)ret=tem;elseret=(tem==-1)?ret:min(tem,ret);a[0][x]=1-a[0][x];return ret;}int main(){int cs;scanf("%d",&cs);for(int CS=1;CS<=cs;++CS){scanf("%d",&n);for(int i=0;i<n;++i)for(int j=0;j<n;++j)scanf("%d",&a[i][j]);printf("Case %d: ",CS);printf("%d\n",dfs(0,0));}return 0;}
0 0
- UVa_11464_Even Parity_机智地搜索
- UVa 11012 - Cosmic Cabbages (机智地枚举)
- 如何机智地转载他人博客
- HDU_4091_Zombie’s Treasure Chest_最小公倍数、机智地枚举
- 教育培训企业:如何优雅、机智地做邮件营销?
- 如何优雅、机智地和新公司谈薪水?
- uva_11464_Even Parity(枚舉,暴力)
- 作为一个前端,可以如何机智地弄坏一台电脑?
- 作为一个前端,可以如何机智地弄坏一台电脑?
- 如何稳定地使用Google搜索?
- 如何稳定地使用 Google 搜索
- 最新谷歌本地搜索api
- 使用 Sphinx 更好地进行 MySQL 搜索
- 快速而高效地搜索XML数据
- 动态地改变Python搜索路径
- 动态地改变Python搜索路径
- 使用 Sphinx 更好地进行 MySQL 搜索
- 高德地土提示搜索 AMapTip
- Windows 7 + IIS7.5 常见错误
- 分享8年开发经验,浅谈个人发展经历,明确自己发展方向(1)
- 查看IC中文文档的网站
- ANT发布SVN WEB项目到TOMCAT以及利用post-commit自动提交编译更新
- 第一周工作总结——BLE: PHY & MAC
- UVa_11464_Even Parity_机智地搜索
- 【leetcode】Linked List Cycle && Linked List Cycle II
- linux 端口查看
- JQuery学习第一天
- POJ 1845 Sumdiv
- 生活的下一站,将驶向哪里?
- Flash Builder4破解步骤
- Android开发中Toast“土司”不显示的原因之容易被忽略的原因
- 关于SQL/NoSQL数据库搜索/查询的思考