对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
2013-09-05 15:22
946 查看
以4*4矩阵为例
1、全部红线元素设为集合A,全部黑线元素设为集合B;A或者B里面的元素彼此互不相邻,对其值没有贡献;也就是说对A里面的元素的值产生贡献的都是B集合里面的元素,sum(A)=sum(B)。
2、任一元素必须小于等于其相邻元素(上下左右)之和
3、以上两点均为必要性,其实满足以上两点的正整数矩阵一定可以由一个全零矩阵经过该运算得到。
考虑以下这种情况,无论A集合中哪个或者哪几个元素意外的增大或减小,只要其满足条件2,这个增大或者减小一定可以通过其相邻的元素传给B集合的任意一个或者多个元素。
还有一个方法,就是正数矩阵进行这种运算的逆运算,看看能否得到全零矩阵。
从第一行第第一列开始遍历第一行和第一列所有的元素,如果为0,则跳过;如果非0,那么选择其任一非0邻居,双方进行减1操作,如果该邻居已经减到0,那么挑选下一个非0邻居,直到自身减到0为止,如果自身不能减到0,则说明该元素不满足条件2,即该正数矩阵不能由一个全零矩阵经过该运算得到。
注意,遍历第一行时优先选择其左右邻居,遍历第一列时优先选择其上下邻居,否则可能会导致满足条件的某元素不能减到0的误判,这是由于第一行第一列的元素的相邻元素少于其邻居的相邻元素所导致的。
递归方式:
第一种,先遍历第一行第一列,然后去掉第一行第一列,然后遍历余下部分的第一行第一列,如下
第二种,先遍历第一行第一列和最后一行最后一列,然后再遍历余下部分的第一行第一列和最后一行最后一列,有四周向中心,如下
两种递归方式都是先遍历相邻元素较少的元素,然后递归下去。
相关文章推荐
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右),某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右),某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
- 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一
- 【编程题目】对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一
- 算法习题45:对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一;;;一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
- 对于一个m*n的整数矩阵,其中每一行和每一列的元素都按升序排列,设计一个高效的算法判断一个数值是否存在,并给出位置
- 45 雅虎判断其是否能够由一个全零矩阵经过上述运算得到
- 现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。
- 判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进
- 题目1.请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个证书x时,判断出S中是否存在有两个其和等于x的元素。
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中
- 12、一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。 请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
- 题目:请给出一个运行时间为Θ(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。
- 对于一个SIZE大小的数组,元素是[0,SIZE-1]区间内的整数,判断其中是否有重复元素
- 在一个长度为n(n < 1000)的整数序列中,判断是否存在某两个元素之和为k。
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。