2017-10-31 4 views
1

각 사각형이있는 보드의 경우 vector< vector< set<int> > >이며 처음에는 가능한 모든 숫자가 {1, 2, 3, 4, 5, 6, 7, 8, 9}이됩니다. 통과 할 때마다 사각형이 설정 될 때마다 상자의 모든 요소를 ​​거쳐 모든 사각형에서 해당 값을 삭제해야합니다.숫자가 이미 표시되었는지 확인하는 방법 - 게임

#include <vector> 
#include <set> 
#include <iostream> 
#include <string> 

using namespace std; 


class Sudoku{ 
    private: 
     int size; 
     vector< vector< set<int> > > board; 

    public: 
     Sudoku(int sizeIn): 
     size(sizeIn){} 

     void setSodoku() { board = vector<vector<set<int>>>(size, vector<set<int>>(size, { 1, 2, 3, 4, 5, 6, 7, 8, 9 })); } 

     void getSquare(int row, int col){ 
      for(auto i : board[row][col]) std::cout << i << '\n'; 
     } 

     bool setSquare(int row, int col, int value){  
      int tempRow = row/size; 
      int tempColumn = col/size; 

     for (int rowC=(tempRow*size);rowC<=((tempRow*size)+(size-1));rowC++) 
     { 
      for (int columnC=(tempColumn*size);columnC<=((tempColumn*size)+(size-1));columnC++) 
      { 
       if(board[rowC][columnC].count(value)==1) 
       { 
        board[rowC][columnC].erase(value); 
       } 

       if(board[rowC][columnC].empty()) 
       { 
        cout << "wait 2 " << endl; 
        return false; 
       } 

      } 
     } 

     return true;   
    }   
}; 

int main(){ 

    // | 2 | 3 | |  | 9 | 1 | 5 |  | | | | 
    // | | | |  | 2 | | |  | 5 | 4 | | 
    // | 6 | | 7 |  | | | |  | | | | 
Sudoku boardTest(9); 
boardTest.setSodoku(); 
boardTest.setSquare(0,0,2); 
boardTest.setSquare(0,1,3); 
boardTest.setSquare(0,3,9); 
boardTest.setSquare(0,4,1); 
boardTest.setSquare(0,5,5); 

boardTest.setSquare(1,3,2); 
boardTest.setSquare(1,6,5); 
boardTest.setSquare(1,7,4); 

boardTest.setSquare(2,0,6); 
boardTest.setSquare(2,2,7); 

cout << "--------" << endl; 
boardTest.getSquare(1,0); 


    return 0; 
} 

내가 행 0 열에서 어떤 요소를 인쇄하려고 하나는 8 표시 실제로 1,4,5,8,9 2,3,6-을 같이해야한다 : 나는 여기에 코드를 , 7은 이미 상자 0 (첫 번째 상자)에 있습니다.

저는 9x9가 있어야한다는 것을 알고 있습니다. 그러나 이것은 테스트 목적으로 만 사용됩니다.

+0

질문이 무엇인지 확실하지 ... 그러나 나는이에게 물어 유사한 게시물 내 경험에서 : 디버거에서 코드를 디버그하려고 했습니까? 디버깅 중에 확인한 문제는 무엇입니까? – YePhIcK

+0

@YePhIcK 코드를 컴파일하면 추적 할 때 아무것도 표시되지 않습니다. – KPO34T

+0

setSquare 보드 [rowC] [columnC]에있는 동안 getSquare는 보드 [col] [row]를 사용합니다. getSquare는 4와 8이 사방에 없기 때문에 hte 전체 보드를 보입니다 ? –

답변

1

나는 그것을 분류했다. 코드에는 2 개의 버그가 있습니다.

1) 크기가 아닌 크기의 제곱근이어야합니다. if 문 세트의 크기가이 1로 동일하지 않은 경우는 체크를해야

2) if(board[rowC][columnC].count(value)==1)

관련 문제