zoukankan      html  css  js  c++  java
  • 矩阵运算 【微软面试100题 第四十五题】

    题目要求:

      对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出以正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。

    题目分析:

      使用贪心算法。

    代码实现:

      

    #include <iostream>
    
    using namespace std;
    
    const int N = 3;
    
    bool MatrixToZero(int a[][N],int x, int y);
    
    int main(void )
    {
        int a[N][N] = {
            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[][N],int x, int y)
    {
        int right = 0,down = 0;
        //此时说明a[N-1][N-1]为,才会跳到 a[N-1][N],这是越界的点,则结束,满足条件。
        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;
    }
  • 相关阅读:
    k-means算法
    偏差-方差分解Bias-Variance Decomposition
    常见machine learning模型实现
    Bag-of-words模型、TF-IDF模型
    atomic原子操作
    oc 计算 带括号 式子
    oc 基本语法 类 静态变量 常量
    通过文件头标识判断图片格式
    十大经典排序算法最强总结(含JAVA代码实现)(转)
    JPEG格式 介绍
  • 原文地址:https://www.cnblogs.com/tractorman/p/4081479.html
Copyright © 2011-2022 走看看