矩阵运算 【微软面试100题 第四十五题】
2014-11-07 15:33
387 查看
题目要求:
对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出以正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
题目分析:
使用贪心算法。
代码实现:
对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出以正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
题目分析:
使用贪心算法。
代码实现:
#include <iostream> using namespace std; const int N = 3; bool MatrixToZero(int a[] ,int x, int y); int main(void ) { int a = { 1,2,1, 1,2,1, 1,2,1 }; cout << MatrixToZero(a,0,0); return 0; } //如果a[x][y] !=0且它的右边或者下边的不为,则同时减一,然后递归 (递归 //的起点还是xy,直到 a[x][y]==0,才跳到下一个点)。如果出现 a[x][y]!=0,但是 //它的右边和下边都是,则说明不能运算到全 //------->y //| //| //| //↓x bool MatrixToZero(int a[] ,int x, int y) { int right = 0,down = 0; //此时说明a[N-1][N-1]为,才会跳到 a[N-1] ,这是越界的点,则结束,满足条件。 if(y==N && x==N-1) return 1; else if (y==N) { y = 0; x++; } if(a[x][y]>0) { //记住减了之后要恢复原来的值 if(y+1<N && a[x][y+1]>0) { a[x][y]--; a[x][y+1]--; right = MatrixToZero(a,x,y); a[x][y]++; a[x][y+1]++; } else if (x+1<N && a[x+1][y]>0) { a[x][y]--; a[x+1][y]--; down = MatrixToZero(a,x,y); a[x][y]++; a[x+1][y]++; } else return 0; } else if (a[x][y] == 0) { return MatrixToZero(a,x,y+1); } return right||down; }
相关文章推荐
- 矩阵运算 【微软面试100题 第四十五题】
- 求一个矩阵中最大的二维矩阵 【微软面试100题 第三十五题】
- 求一个矩阵中最大的二维矩阵 【微软面试100题 第三十五题】
- 【100题】第四十五题 雅虎面试两道题(矩阵判断、数组划分)
- 【100题】第四十五题 雅虎面试两道题(矩阵判断、数组划分)
- 二叉树的镜像 【微软面试100题 第十五题】
- zt微软面试100题 [机密]71-100
- 关于本微软等公司数据结构+算法面试100题系列的郑重声明
- 【从零单排之微软面试100题系列】04之二叉树中和为某一值的路径
- (微软面试100题)设计包含min 函数的栈
- 微软等公司数据结构+算法面试100题--树
- 寻找丑数 【微软面试100题 第六十四题】
- 微软面试100题
- 永久勘误:微软等面试100题答案V0.3版[第21-40题答案]
- 关于链表问题的面试题目 【微软面试100题 第七十七题】
- 排队问题 【微软面试100题 第八十题】
- 微软等数据结构+算法面试100题004
- 微软面试100题2010年版全部答案集锦(含下载地址)
- 数组中的等差数列 【微软面试100题 第九十四题】
- 《微软等数据结构+算法面试100题》自娱自解(完结)