C++:返回矩阵中给定数字的行和列,函数 新手C++程序员使用Visual Studio 2013 .< /P>

C++:返回矩阵中给定数字的行和列,函数 新手C++程序员使用Visual Studio 2013 .< /P>,c++,puzzle,C++,Puzzle,我想写一个函数,在这里我可以插入一个数字,它会检查这个数字的正上方、下方或旁边是否有一个零,然后返回零的位置 例如,如果我想检查数字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 这是到目前为止我的代码,它只会创建一个向量矩阵抱歉,如果我使用了

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

例如,如果我想检查数字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之间的数字随机化,并将其放置在一行col,然后将所选行col中的一个数字替换为0,并使用函数集_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;
    }   
}

我试着在网上搜索类似的东西,但我没有找到,我肯定它在那里,但我只是不知道如何正确地表达搜索问题。

是的,让我们尝试使用模拟矩阵的二维数组,int a[][]指的是二维矩阵

下面是您的示例:您希望检查相邻条目是否为零。让我们用你的例子,1,1等于2

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

设矩阵为一定大小的整数2d矩阵

如果矩阵[1][2]等于0,则 返回位置权 如果矩阵[1][0]等于0,则 返回位置左 如果矩阵[0][1]等于0,则 返回位置向上 如果矩阵[2][1]等于0,则 返回位置向下


因为您只检查直接相邻的索引,所以4 if语句检查相邻的零不是一个坏主意

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

因为我不知道如何返回两个值,所以我只做了两个函数,一个返回行的位置,一个返回列的零位置

当它超出矩阵的边界时,我也遇到了问题,所以因为我有一个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;
}

我不确定我是否理解你的问题。你的意思是你想使用?你是在问如何从键盘获取输入?@Streppel我想创建一个函数,在其中插入一个整数x,该函数将从x搜索相邻的数字,并检查其中是否有零。如果是这样,它应该返回所说的零的位置。谢谢你的输入,它启发了我,我找到了一个可能的解决方案。