2014-11-18 1 views
0

초보자 C++ 프로그래머 (Visual Studio 2013 사용).C++ : 매트릭스에서 주어진 숫자의 행 및 열 반환 function

숫자를 삽입 할 수있는 함수를 작성하고 해당 숫자의 바로 위나 아래 또는 옆에 0이 있는지 확인한 다음 0 위치를 반환합니다.

예를 들어 (1, 1)에있는 숫자 2의 주변을 확인하려면 (1, 2)에있는 0의 위치를 ​​반환하고 싶습니다. 이 일을 어떻게 하죠? 대신 행렬 필드를 사용해야합니까 (예 : int [] [])?

이 함수는 숫자 2가 다른 숫자 (제 경우는 0)와 교환 할 수 있는지를 결정하는 데 사용되며 제로가 바로 위에 있거나 아래 또는 옆에있는 경우에만 수행 할 수 있습니다 그것. A (행 안부)에서 15과 장소를 -

지금까지, 그것은 단지 벡터 매트릭스 (I 잘못된 용어를 사용하고 있다면 죄송합니다)를 생성이 내 코드입니다
3 5 6 8 
9 2 0 7 
1 8 9 3 
1 3 5 7 

는 1 번 사이를 랜덤 선택한 행 (col)의 숫자를 0으로 바꾸려면 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] (http://en.cppreference.com/w/cpp/utility/pair)를 사용 하시겠습니까? – streppel

+0

키보드로 입력하는 방법을 묻고 있습니까? – splrs

+0

@Streppel 정수 x를 삽입 할 수있는 함수를 만들고 싶습니다. 함수는 x에서 인접한 숫자를 검색하고 그 중 하나가 0인지 확인합니다.만일 그렇다면, 숄드는 상기 제로의 위치를 ​​리턴한다. – crypt555

답변

0

그래, 2 차원 배열 (행렬을 시뮬레이트하는 int [] []은 2 차원 행렬이라고 함)을 사용해 보겠습니다.

예를 들면 다음과 같습니다. 인접 항목이 0인지 확인하고 싶습니다. 귀하의 (1,1)이 2 인 예를 사용합시다.

일련의 if 문이 솔루션이 될 수 있습니다.

행렬을 어떤 크기의 정수 2d 행렬이라고합시다.

행렬 [1] [2] 매트릭스는 [1] [0] 다음 0과 같으면 0 다음 복귀 행렬 [0] [1] 다음 0과 같으면 복귀 을 positionLeft 을 positionRight 같으면 창 positionUp 경우 행렬 [2] [1] = 0이면 return positionDown

인접한 인덱스를 직접 확인하기 때문에 인접한 0을 검사하는 생각이 나쁘지 않습니다.

+0

의견을 보내 주셔서 감사 드리며 가능한 해결책을 찾았습니다. – crypt555

0

나는 이것이 해결책일지도 모른다라고 생각한다, 그것은 약간 원시적이다 고 느낀다.

두 값을 반환하는 방법을 알 수 없기 때문에 두 개의 함수를 만들었습니다. 하나는 행의 위치를 ​​반환하고 하나는 0을 나타냅니다.

매트릭스의 범위를 벗어날 때도 문제가 발생합니다. 따라서 4x4 매트릭스가 있기 때문에 대신 6x6으로 만들고 -1 프레임으로 둘러 쌉니다.

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; 
} 
관련 문제