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

输入格式
输入的第一行为数据组数T(T≤30)。每组数据的第一行为正整数n(1≤n≤15);
接下来的n行每行包含n个非0即1的整数,相邻整数间用一个空格隔开。
输出格式
对于每组数据,输出被改变的元素的最小个数。如果无解,应输出-1。
PS:
我虽然不能排列每一个,但我可以排类第一行,然后让后面的根据第一行进行排列
package 第七次模拟;
import java.util.Scanner;
public class Demo3矩阵 {
static int n, Min,M=20;
static int [] [] a = new int [M][M];
static int [] [] b = new int [M][M];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cas, t = 0;
cas=sc.nextInt();
while(t++<cas)
{
n=sc.nextInt();
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
a[i][j]=sc.nextInt();
Min = Integer.MAX_VALUE;
dfs(0);//开始枚举;
System.out.printf("Case %d: ",t);
if(Min==1e9)
System.out.printf("-1\n");
else
System.out.printf("%d\n",Min);
}
}
static int check(int x, int y)//将其上左右三面的值相加
{
int sum = 0;
if(x-1>=0) sum += b[x-1][y];
if(y-1>=0) sum += b[x][y-1];
if(y+1<n) sum += b[x][y+1];
return sum%2;//如果是偶数就返回0,奇数就返回1
}
static void dfs(int cur)
{
//利用深度优先遍历枚举第一行
if(cur!=n)
{
b[0][cur] = 1;
dfs(cur+1);
b[0][cur] = 0;
dfs(cur+1);
}
else//枚举完之后开始递推下面每一行的情况
{
for(int i = 1; i < n; i++)
for(int j = 0; j < n; j++)
b[i][j] = check(i-1,j);
int cou = 0;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
if(a[i][j]==1&&b[i][j]==0)
return;//题目只能把0变1,不能把1变0,所以直接结束。
else if(a[i][j]==0&&b[i][j]==1)
cou++;//只有当出现原来为0,枚举出的结果中为1的情况,cou才+1
if(Min>cou)
Min = cou;
return;
}
}
}
Java实现偶数矩阵(Even Parity, UVa 11464)的更多相关文章
- 偶数矩阵 Even Parity,UVa 11464
题目描述 Description 给你一个n*n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.如图所示的矩阵至少要把3个 ...
- 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,如果说对于一个矩阵,它的所有的点的上下左右的点的和是偶数,则称这个矩阵为偶数矩阵,现在给你一个任意的矩阵,要求的是如果要把这个矩阵变成偶数 ...
- Java大数——快速矩阵幂
Java大数——快速矩阵幂 今天做了一道水题,尽管是水题,但是也没做出来.最后问了一下ChenJ大佬,才慢慢的改对,生无可恋了.... 题目描述: 给a,b,c三个数字,求a的b次幂对c取余. 数据范 ...
随机推荐
- IE浏览器下报错: strict 模式下不允许一个属性有多个定义
vue项目,打包后在IE11和360浏览器(都是IE内核)上运行,控制台报了strict 模式下不允许一个属性有多个定义这个错误,导致流程不能正常走下去,查资料后知道应该是定义了重复的属性,于是就开始 ...
- git工作中最常用的用法教程,不走命令行
·1.1 git的概述 Git(读音为/gɪt/.)是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Lin ...
- linux --开机自动挂载硬盘【转】
转:http://c.biancheng.net/view/900.html 了解了 mount 命令之后,读者可能会问,系统如何在开机时自动挂载硬盘,它又是怎么知道哪些分区是需要挂载的呢? 很简单, ...
- 初识spring boot maven管理--SpringMVC
springboot完美的支持了springmvc,自家东西当然是支持最好的啦! @EnableAutoConfiguration自动注入了一下信息 1.包含了ContentNegotiatingVi ...
- jsp 中文乱码????解决
中文乱码是个非常蛋疼的问题,在页面表单提交的时候后台获取数据变成了????,解决方案如下: 1:确认编码都是一致的如页面和后台都设置为utf-8 2:String str = new String(r ...
- 漫谈Huawei LiteOS五大内核模块
[摘要]Huawei LiteOS是华为面向IoT领域,构建的“统一物联网操作系统和中间件软件平台”,以轻量级(内核小于10k).低功耗(1节5号电池最多可以工作5年),快速启动,互联互通,安全等关键 ...
- HTTP及Web核心基础
1. HTTP服务重要基础 1.1 用户访问网站基本流程 (1)客户端从浏览器输入"www.baidu.com"网站地址,回车后,系统首先会查找系统本地的DNS缓存及hosts文件 ...
- Java—CountDownLatch使用详解
CountDownLatch介绍 CountDownLatch概述 CountDownLatch一般用作多线程倒计时计数器,强制它们等待其他一组(CountDownLatch的初始化决定)任务执行完成 ...
- Django组件content-type使用方法详解
前言 参考博客:https://www.zhangshengrong.com/p/zD1yQJwp1r/ 一个表和多个表进行关联,但具体随着业务的加深,表不断的增加,关联的数量不断的增加,怎么通过一开 ...
- 手写一个简版 asp.net core
手写一个简版 asp.net core Intro 之前看到过蒋金楠老师的一篇 200 行代码带你了解 asp.net core 框架,最近参考蒋老师和 Edison 的文章和代码,结合自己对 asp ...