偶数矩阵(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:

我虽然不能排列每一个,但我可以排类第一行,然后让后面的根据第一行进行排列

  1. package 第七次模拟;
  2. import java.util.Scanner;
  3. public class Demo3矩阵 {
  4. static int n, Min,M=20;
  5. static int [] [] a = new int [M][M];
  6. static int [] [] b = new int [M][M];
  7. public static void main(String[] args) {
  8. Scanner sc = new Scanner(System.in);
  9. int cas, t = 0;
  10. cas=sc.nextInt();
  11. while(t++<cas)
  12. {
  13. n=sc.nextInt();
  14. for(int i = 0; i < n; i++)
  15. for(int j = 0; j < n; j++)
  16. a[i][j]=sc.nextInt();
  17. Min = Integer.MAX_VALUE;
  18. dfs(0);//开始枚举;
  19. System.out.printf("Case %d: ",t);
  20. if(Min==1e9)
  21. System.out.printf("-1\n");
  22. else
  23. System.out.printf("%d\n",Min);
  24. }
  25. }
  26. static int check(int x, int y)//将其上左右三面的值相加
  27. {
  28. int sum = 0;
  29. if(x-1>=0) sum += b[x-1][y];
  30. if(y-1>=0) sum += b[x][y-1];
  31. if(y+1<n) sum += b[x][y+1];
  32. return sum%2;//如果是偶数就返回0,奇数就返回1
  33. }
  34. static void dfs(int cur)
  35. {
  36. //利用深度优先遍历枚举第一行
  37. if(cur!=n)
  38. {
  39. b[0][cur] = 1;
  40. dfs(cur+1);
  41. b[0][cur] = 0;
  42. dfs(cur+1);
  43. }
  44. else//枚举完之后开始递推下面每一行的情况
  45. {
  46. for(int i = 1; i < n; i++)
  47. for(int j = 0; j < n; j++)
  48. b[i][j] = check(i-1,j);
  49. int cou = 0;
  50. for(int i = 0; i < n; i++)
  51. for(int j = 0; j < n; j++)
  52. if(a[i][j]==1&&b[i][j]==0)
  53. return;//题目只能把0变1,不能把1变0,所以直接结束。
  54. else if(a[i][j]==0&&b[i][j]==1)
  55. cou++;//只有当出现原来为0,枚举出的结果中为1的情况,cou才+1
  56. if(Min>cou)
  57. Min = cou;
  58. return;
  59. }
  60. }
  61. }

Java实现偶数矩阵(Even Parity, UVa 11464)的更多相关文章

  1. 偶数矩阵 Even Parity,UVa 11464

    题目描述 Description 给你一个n*n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.如图所示的矩阵至少要把3个 ...

  2. Even Parity UVA - 11464 (枚举)

    从来没有觉得枚举有多费脑子的.但是这道题还是很香的. 思路:就是非常简单的枚举啦.   从一般的枚举开始考虑.一般的做法就是在所有的格子中有两种状态1, 0. 而一共有225个格子,所有一共要枚举的情 ...

  3. 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵

    偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.比 ...

  4. UVA 11464 偶数矩阵

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. UVA.11464 Even Parity (思维题 开关问题)

    UVA.11464 Even Parity (思维题 开关问题) 题目大意 给出一个n*n的01方格,现在要求将其中的一些0转换为1,使得每个方格的上下左右格子的数字和为偶数(如果存在的话),求使得最 ...

  6. 状态压缩+枚举 UVA 11464 Even Parity

    题目传送门 /* 题意:求最少改变多少个0成1,使得每一个元素四周的和为偶数 状态压缩+枚举:枚举第一行的所有可能(1<<n),下一行完全能够由上一行递推出来,b数组保存该位置需要填什么 ...

  7. 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 ...

  8. UVa 11464 - Even Parity

    解题报告:题目大意有一个N×N的矩阵,矩阵中的元素只有1或0,如果说对于一个矩阵,它的所有的点的上下左右的点的和是偶数,则称这个矩阵为偶数矩阵,现在给你一个任意的矩阵,要求的是如果要把这个矩阵变成偶数 ...

  9. Java大数——快速矩阵幂

    Java大数——快速矩阵幂 今天做了一道水题,尽管是水题,但是也没做出来.最后问了一下ChenJ大佬,才慢慢的改对,生无可恋了.... 题目描述: 给a,b,c三个数字,求a的b次幂对c取余. 数据范 ...

随机推荐

  1. Redis学习笔记(三) 字典

    Redis的字典使用哈希表作为底层实现,一个哈希表中可以有多个哈希表节点,而每个哈希节点就保存在字典中的一个键值对. redis字典所用的哈希表由disht结构定义. typedef struct d ...

  2. [ACdream 1215 Get Out!]判断点在封闭图形内, SPFA判负环

    大致题意:在二维平面上,给一些圆形岛屿的坐标和半径,以及圆形船的位置和半径,问能否划到无穷远的地方去 思路:考虑任意两点,如果a和b之间船不能通过,则连一条边,则问题转化为判断点是否在多边形中.先进行 ...

  3. [hdu1532]最大流

    裸最大流,求最大流一般步骤如下: (1)所有正向边权初始化为容量,反向边权初始化为0 (2)找增广路 (3)找到则进入(4),否则得到最大流并退出 (4) 增广路上所有边减去最小边权,相应的方向边加上 ...

  4. 关于layui数据表格的各种事件

    table.on('tool(demo)', function(obj){}):监听工具条事件,tool 是工具条事件名,demo 是 table 原始容器的属性 lay-filter="对 ...

  5. Js调用Android回调处理

    通常在混合app中经常会使用js调用native的方法,一般是: window.nativeApp.call(XXX); 直接调用native方法,对于简单的处理倒是可以,如果需要回调呢?期待的方式是 ...

  6. 让写作省心一点——Markdown和CSS实践

    1 引言 今天这篇推送和以往不太一样,乍一看就能发现格式有了变化.没错,这是我专门设计的品牌模板,也就是本公众号以后创作的文章可直接套用,获得一致的风格样式. 除此以外,文章里的全部元素(包括标题.表 ...

  7. firefox的fq设置图文教程- 【windows,mac通用】

    不能像下图一样全部设置socket代理,这样会把所以请求都转发到ss ! 应该使用系统设置,这里不能用pac ,因为pac 链接每次都是变化的. 搞定.

  8. 【雕爷学编程】Arduino动手做(59)---RS232转TTL串口模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  9. HDU2819

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2819 题目大意: 给出一个N*N的0/1矩阵,只能交换整行或者整列,问最少交换多少次可以变成一个主对角 ...

  10. xshell使用技巧

    XShell是一款Windows下的一款远程连接Linux主机的工具,类似的软件还有SecureCRT,putty等,但是个人感觉XShell好用,功能强大.. 一.复制和粘贴 linux的Shell ...