C ++: вернуть строку и столбец заданного числа в матрице, функция

0

начинающий программист 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 и помещает его в (row, col), а затем заменяет число в (строка, col) с нулем с функцией 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;
    }   
}

Я пробовал искать в Интернете что-то похожее, но я его не нашел, я уверен, что он есть, но я просто не знаю, как правильно сформулировать вопрос поиска.

  • 1
    Я не уверен, что понимаю ваш вопрос. Вы имеете в виду, что хотите использовать std :: pair ?
  • 0
    Вы спрашиваете, как получить ввод с клавиатуры?
Показать ещё 1 комментарий
Теги:
puzzle

2 ответа

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;
}
0

Да, попробуйте использовать 2d-массив (который имитирует матрицу, int a [] [] относится к матрице 2d).

Следуя вашему примеру: вы хотите проверить, равны ли соседние записи. Пусть ваш пример (1,1) равен 2.

Ряд утверждений if может быть вашим решением.

Пусть матрица является целочисленной 2d-матрицей некоторого размера.

если матрица [1] [2] равна 0, тогда return positionRight, если матрица [1] [0] равна 0, тогда return positionLeft, если матрица [0] [1] равна 0, тогда верните позициюUp, если матрица [2] [1] равна 0, тогда return positionDown

Поскольку вы проверяете только индексы непосредственно рядом, операторы 4 if не так плохо анализируют для смежного нуля.

  • 0
    Спасибо за ваш вклад, это вдохновило меня, и я нашел возможное решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню