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;
    }
  • 相关阅读:
    xml基础一
    FileStream
    串口、COM口、RS232、RS485、USB区别
    DotNet知识点五
    DotNet知识点四
    DotNet知识点三
    DotNet知识点二
    day02 关键字、添加注释、标识符、常量、变量、变量的定义、变量定义注意事项、转义字符
    day01
    22_Map集合(重点)
  • 原文地址:https://www.cnblogs.com/tractorman/p/4081479.html
Copyright © 2011-2022 走看看