偶数矩阵 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.但是完全枚举整个矩阵显 ...
随机推荐
- spring-data-mongodb中的MongoTemplate与MongoRepository及推荐
SpringData支持两种关系数据存储技术: JDBCJPA ● SpringData 方法定义JPA规范: 1. 不是随便声明的,而需要符合一定的规范2. 查询方法以find | read | g ...
- XML 中的 xmlns 等属性的意义
原文:https://blog.csdn.net/lengxiao1993/article/details/77914155 Maven 是一个 java 开发人员很难绕过的构建工具, 因为有众多的开 ...
- Java对象为啥要实现Serializable接口
Serializable接口概述 Serializable是java.io包中定义的.用于实现Java类的序列化操作而提供的一个语义级别的接口.Serializable序列化接口没有任何方法或者字段, ...
- Android点击事件通过kotlin几种实现方式总结
一般来说,Android点击事件通过kotlin有以下几种实现方式: 1.通过全局接口View.OnClickListener实现,代码如下 //class MainActivity : AppCom ...
- Python3基础 内置函数 hash
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- flutter的加载弹框
代码组件: import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'packa ...
- 使用navicat的坑
小黄人发送数据,测试软件是否将数据存入mysql数据库中,使用的是navicat. 首先截断了表,所有数据清零,但是此时表并没有回到第一页[由于前面查看最新数据,已经翻到了最后一页],然后小黄人发数据 ...
- git 更新fork的远程仓库
1.添加远程仓库到本地remote分支 git remote add upstream git@github.com:apache/flink.git # 远程仓库地址 2.查看当前仓库的远程分支 g ...
- linux用户解锁
pam_tally2 --user=username #查看 pam_tally2 --user=username --reset #重置
- CentOS7使用yum安装RabbitMQ
转自:https://jingyan.baidu.com/article/456c463b16f3820a583144a1.html 登录名:admin 密码:admin 1. 如果安装后web界 ...