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取余. 数据范 ...
随机推荐
- Linux内核驱动学习(二)添加自定义菜单到内核源码menuconfig
文章目录 目标 drivers/Kconfig demo下的Kconfig 和 Makefile Kconfig Makefile demo_gpio.c 目标 Kernel:Linux 4.4 我编 ...
- Kali:系统安装之后进行所需配置
apt设置源 由于官网的源需要墙或者想使用国内的源,可以修改source.list vi /etc/source.list 打开文件并修改为其他可用的源地址,以下可供参考 deb http://ftp ...
- [hdu5396 Expression]区间DP
题意:给一个表达式,求所有的计算顺序产生的结果总和 思路:比较明显的区间dp,令dp[l][r]为闭区间[l,r]的所有可能的结果和,考虑最后一个符号的位置k,k必须在l,r之间,则l≤k<r, ...
- ASA failover配置(A/S)
环境描述 1. 两条公网出口,分别为移动,联通 2. 两台ASA做主备配置,实现出口故障转移 3. 内网两台核心做堆叠配置(由于模拟器无法实现堆叠,此处使用HSRP) 需求描述 1. 当一条公网链路故 ...
- git --添加多个文件
今天测试,发现之前写的auto testcase,有好多发生了改变,因此需要修改脚本重新上传至git当中. 对好几个test case script 进行了修改,之前只是一个一个的修改,这次是多个,经 ...
- HttpRequestUtils post get请求
package com.nextjoy.projects.usercenter.util.http; /** * Created by Administrator on 2016/10/20. */ ...
- 【雕爷学编程】Arduino动手做(50)---W25Q64存储模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...
- 全网最详细最好懂 PyTorch CNN案例分析 识别手写数字
先来看一下这是什么任务.就是给你手写数组的图片,然后识别这是什么数字: dataset 首先先来看PyTorch的dataset类: 我已经在从零学习pytorch 第2课 Dataset类讲解了什么 ...
- 模板渲染jnja2模块
模板渲染jnja2模块 模板的引入: 在返回动态页面时,上述我们在08版web框架返回每次访问的时间,利用自己写的占位符进行字符串替换进行动态响应: 在实际应用中,完全可以从数据库中读取数据,然后替换 ...
- MongoDB启动闪退问题完美解决
如果你看到这篇文章,说明你也遇到了启动MongoDB闪退的情况.由于只是学习MongoDB,所以很多人不想使用MongoDB的安装版,而使用免安装版.但是在启动mongod.exe 的时候,就会出现闪 ...