偶数矩阵 Even Parity,UVa 11464
给你一个n*n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上、下、左、右的元素(如果存在的话)之和均为偶数。如图所示的矩阵至少要把3个0变成1,最终如图所示,才能保证其为偶数矩阵。

输入的第一行为数据组数T(T<30)。每组数据的第一行为正整数n(1 < n < 15);接下来的n行每行包含n个非0即1的整数,相邻整数间用一个空格隔开。
输出格式:
对于每组数据,输出被改变的元素的最小个数。如果无解,应输出-1。
0 0 0
1 0 0
0 0 0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
const int MAXN=;
const int INF=;
int A[MAXN][MAXN],B[MAXN][MAXN];
int n;
int min(int a,int b)
{
return a>b?b:a;
}
int check(int s)
{
memset(B,,sizeof(int));
for(int c=;c<n;c++)//枚举第一行
{
if(s&(<<c)) B[][c]=;
else if(A[][c]==) return INF;//不能把1变成0,直接返回
}
for(int r=;r<n;r++)//从第二行开始依次筛查
{
for(int c=;c<n;c++)
{
int sum=;//表示上左右三个元素的和
if(r>) sum+=B[r-][c];
if(c>) sum+=B[r-][c-];
if(c<n-) sum+=B[r-][c+];
B[r][c]=sum%;
if(A[r][c]==&&B[r][c]==) return INF;//违法,不能把1变为0
}
}
int cnt=;
for(int r=;r<n;r++)
{
for(int c=;c<n;c++)
{
if(A[r][c]!=B[r][c]) cnt++;
}
}
return cnt;
}
int main()
{
int r,c;//行、列
int i,j;
int T;
int ans=INF;//初始化为最大值
scanf("%d",&T);
while(T)
{
ans=INF;
scanf("%d",&n);
for(i=;i<n;i++)
{
for(j=;j<n;j++)
{
scanf("%d",&A[i][j]);
}
}
for(int s=;s<(<<n);s++)//1<<n等于2^n,不用pow,比较方便
{
ans=min(ans,check(s));//不断更新最小ans
}
if(ans==INF) ans=-;//没找到答案
printf("%d %d\n",T,ans);
T--;
}
return ;
}
偶数矩阵 Even Parity,UVa 11464的更多相关文章
- Java实现偶数矩阵(Even Parity, UVa 11464)
偶数矩阵(Even Parity, UVa 11464) 问题描述 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1, 使得每个元素的上.下.左.右的元素(如果存在的话)之和 ...
- Even Parity UVA - 11464 (枚举)
从来没有觉得枚举有多费脑子的.但是这道题还是很香的. 思路:就是非常简单的枚举啦. 从一般的枚举开始考虑.一般的做法就是在所有的格子中有两种状态1, 0. 而一共有225个格子,所有一共要枚举的情 ...
- 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵
偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.比 ...
- UVA 11464 偶数矩阵
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA.11464 Even Parity (思维题 开关问题)
UVA.11464 Even Parity (思维题 开关问题) 题目大意 给出一个n*n的01方格,现在要求将其中的一些0转换为1,使得每个方格的上下左右格子的数字和为偶数(如果存在的话),求使得最 ...
- 状态压缩+枚举 UVA 11464 Even Parity
题目传送门 /* 题意:求最少改变多少个0成1,使得每一个元素四周的和为偶数 状态压缩+枚举:枚举第一行的所有可能(1<<n),下一行完全能够由上一行递推出来,b数组保存该位置需要填什么 ...
- UVA 11464 Even Parity(部分枚举 递推)
Even Parity We have a grid of size N x N. Each cell of the grid initially contains a zero(0) or a on ...
- UVa 11464 - Even Parity
解题报告:题目大意有一个N×N的矩阵,矩阵中的元素只有1或0,如果说对于一个矩阵,它的所有的点的上下左右的点的和是偶数,则称这个矩阵为偶数矩阵,现在给你一个任意的矩阵,要求的是如果要把这个矩阵变成偶数 ...
- 【转载】UVa 11464 Even Parity 偶数矩阵
题意:给你一个n*n的01矩阵,让你把这个矩阵中尽量少的0转换成1,使得矩阵每个位置的上下左右四个相邻的数加起来能被2整除,求最少的转换数 首先,n 的规模并不大,最大只有15.但是完全枚举整个矩阵显 ...
随机推荐
- C# 获取USB设备信息
C# 获取USB设备信息WMI方式 using System; using System.Management; using System.Text.RegularExpressions; using ...
- win10 'make' 不是内部或外部命令
win10 解决“ 'g++' 不是内部或外部命令,也不是可运行的程序或批处理文件”的问题 https://www.jianshu.com/p/9bffbaf12bed windows下提示make不 ...
- Dart泛型
/* 通俗理解:泛型就是解决 类 接口 方法的复用性.以及对不特定数据类型的支持(类型校验) */ //只能返回string类型的数据 // String getData(String value){ ...
- shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中
shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中 利用shell脚本将文本数据导入到mysql中 需求1:处理文本中的数据,将文本中的数据插入到mys ...
- Python3基础 函数 参数 在设定缺省值的情况下指明参数类型
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- Java中字符串操作的基本方法总结:
1.字母大小写转换: package com.imooc; public class SortDemo { public static void main(String[] args) { char ...
- dapperHelper
public class DapperHelper { /// 数据库连接名 private static string _connection = string.Empty; /// 获取连接名 p ...
- Qt编写自定义控件60-声音波形图
一.前言 这个控件源自于一个音乐播放器,在写该音乐播放器的时候,需要将音频的数据转换成对应的频谱显示,采用的fmod第三方库来处理(fmod声音系统是为游戏开发者准备的革命性音频引擎,非常强大和牛逼) ...
- redis cluster环境搭建
环境搭建 http://blog.51cto.com/zhoushouby/1560400 http://hot66hot.iteye.com/blog/2050676 ruby环境安装---ruby ...
- ubuntu18.04安装DB2 11.1 Express-c
参考连接:https://developer.ibm.com/answers/questions/280797/download-db2-express-c-105-1/ 这个参考页面提供了DB2 E ...