C ++:返回行&矩阵中给定数字的列,函数

时间:2014-11-18 17:58:15

标签: c++ puzzle

新手C ++程序员(使用Visual Studio 2013)。

我想写一个函数,我可以插入一个数字,它将检查该数字是否在它的正上方,下方或旁边是零,然后返回零的位置。

例如,如果我想检查数字2的周围是(1,1),我希望它返回(如果有的话)0的位置,即(1,2)。我该怎么做呢?我应该使用矩阵字段(int a [] []例如。)?

该函数将用于确定数字(例如2)是否能够与另一个数字交换位置(在我的情况下为零),并且只有在零位于其正上方,下方或旁边时才能执行此操作。

3 5 6 8
9 2 0 7
1 8 9 3
1 3 5 7

这是我的代码到目前为止,它只创建了一个向量矩阵(对不起,如果我使用的是不正确的术语),将1到15之间的数字随机化并将其放在(行,列),然后替换为所选(行,列)中的数字,其函数为set_zero,为零。

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <vector>
using namespace std;

void set_zero(int row, int column, vector<vector<int>>& v){

    v[row][column] = 0;
}


void scan_zero(vector<vector<int>>& v){

}

int _tmain(int argc, _TCHAR* argv[])
{
    const int x = 4;
    vector<vector<int>> v(x, vector<int>(x));

    for (int i = 0; i < x; i++){
        for (int j = 0; j < x; j++){
            v[i][j] = rand() % 15 + 1;  
        }
    }

    set_zero(1, 2, v);

    for (int i = 0; i < x; i++){
        for (int j = 0; j < x; j++){
            cout << setw(3) << v[i][j] << " ";
        }
        cout << endl;
    }   
}

我尝试在网上搜索类似的东西,但我还没有找到它,我确定它在那里,但我不知道如何正确地制定搜索问题。

2 个答案:

答案 0 :(得分:0)

是的,让我们尝试使用2d数组(模拟矩阵,int [] []引用2d矩阵)。

按照您的示例:您要检查相邻条目是否为零。让我们用(1,1)的例子为2.

一系列if语句可能是您的解决方案。

设矩阵是某个大小的整数2d矩阵。

如果矩阵[1] [2]等于0则 返回位置右 如果矩阵[1] [0]等于0则 返回positionLeft 如果矩阵[0] [1]等于0则 返回位置 如果矩阵[2] [1]等于0则 return positionDown

由于您只是检查直接相邻的索引,因此4个if语句对于检查相邻零点的想法并不是那么糟糕。

答案 1 :(得分:0)

我认为这可能是一个解决方案,但感觉有点原始。

因为我无法弄清楚如何返回两个值,我只做了两个函数,一个返回行的位置,一个列为零。

当它延伸到矩阵的边界之外我也遇到了问题,所以因为我有一个4x4矩阵,我改为6x6并用-1s的帧包围它。

int scan_zero_r(int r, int c, vector<vector<int>>& v){
    int l = r + 1, k = r - 1;
        if (v[l][c] == 0)
            return l;
        if (v[k][c] == 0)
            return k;
        else
            return r;
}

int scan_zero_c(int r, int c, vector<vector<int>>& v){
    int l = c + 1, k = c - 1;
        if (v[r][l] == 0)
            return l;
        if (v[r][k] == 0)
            return k;
        else
            return c;
}