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가 있어야한다는 것을 알고 있습니다. 그러나 이것은 테스트 목적으로 만 사용됩니다.
질문이 무엇인지 확실하지 ... 그러나 나는이에게 물어 유사한 게시물 내 경험에서 : 디버거에서 코드를 디버그하려고 했습니까? 디버깅 중에 확인한 문제는 무엇입니까? – YePhIcK
@YePhIcK 코드를 컴파일하면 추적 할 때 아무것도 표시되지 않습니다. – KPO34T
setSquare 보드 [rowC] [columnC]에있는 동안 getSquare는 보드 [col] [row]를 사용합니다. getSquare는 4와 8이 사방에 없기 때문에 hte 전체 보드를 보입니다 ? –