크기가 n 인 tic-tac-toe "board"가 주어진 보드의 모든 자식을 반환하는 경우 구현을 작성해야합니다. 그러나 각 벡터 내부의 값을 인쇄하지 않기 때문에 그 이유를 모르겠습니다.C++ Vector를 사용하여 Tic-Tac-Toe Tree의 모든 자식 가져 오기
여기에서 우리는 X (1로 표시됨)가 항상 O (-1로 표시됨)보다 먼저 나오는 것으로 가정합니다. 빈 공간은 여기서 0
로서 나타내고있는 헤더 파일의 개인 데이터 멤버로서 vector<int> b_;
및 int n_;
가지고 구현 파일이다 :
#include "tttboard.h"
#include <vector>
#include <iostream>
using namespace std;
tttboard::tttboard()
{
}
tttboard::tttboard(int n, vector<int> &e)
{
n_ = n;
for (int i=0; i<n*n; i++)
{
e.push_back(i);
}
}
tttboard::tttboard(int n){
n_ = n;
for (int i=0; i<n*n; i++)
b_.push_back(0);
}
vector<tttboard> tttboard::possibleNextBoards(int turn) const{
vector<tttboard> children;
int temp;
for (int i = 0; i < children.size(); i++)
{
children.push_back(temp);
}
return children;
}
bool tttboard::operator==(const tttboard& rhs) const
{
bool check = true;
for (int i=0; i < b_.size(); i++)
{
if (b_[i] == rhs.b_[i])
{
continue;
}
else
{
check = false;
break;
}
}
return check;
}
ostream& operator << (ostream & output, const tttboard &board)
{
output << "{";
for (int i=0; i < board.b_.size(); i++)
{
output << board.b_[i];
if (i != board.b_.size() - 1)
output << ", ";
}
output << "}";
return output;
}
EDIT :이 기본 파일인지 I
#include "tttboard.h"
#include "gTree.h"
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
void Tokenize(string line, vector<string> & tokens, string delimiters = "\t "){
string token = "";
string OneCharString = " ";
for (int i=0; i<line.size(); i++)
if (find(delimiters.begin(), delimiters.end(), line[i])!=delimiters.end()) // line[i] is one of the delimiter characters
{
if (token != "")
tokens.push_back(token);
token = "";
}
else
{
OneCharString[0] = line[i];
token +=OneCharString;
}
if (token != "")
tokens.push_back(token);
}
int getTurn(vector<int> b){
int s = 0;
for (int i=0; i<b.size(); i++)
s+=b[i];
if (s==0)
return 1;
else
return -1;
}
int main(int argc, char** argv){
if (argc!=3){
cout << "usage: executable.o n board\n example of board:(\"{0,0,1,0,0,-1,1,0,0}\")";
return 1;
}
int n= atoi(argv[1]);
string str_board = argv[2];
vector<string> tokens;
Tokenize(str_board,tokens," {,}");
vector<int> board;
for (int i=0; i<tokens.size(); i++){
board.push_back(atoi(tokens[i].c_str()));
}
if (n*n!= board.size()){
cout<< "n and board are not consistent!\n";
return 1;
}
tttboard p(n,board);
int turn = getTurn(board);
vector<tttboard> v = p.possibleNextBoards(turn);
cout <<"children of the given board:" << endl;
for (int i=0; i<v.size(); i++)
cout << v[i] << endl;
return 0;
} (이 긴 약간의 경우 사과) 함께 일하고
'메인'의 모양은 무엇입니까? 또한, tttboard :: operator =='는 그렇게 복잡 할 필요는 없습니다. 단지 for (...) {if (b_ [i]! = rhs.b_ [i])가 false를 반환합니다. } return true;'할 것이며,'possibleNextBoards'의 논리는 나에게별로 의미가 없습니다. 그러나 그 중 어느 것도 문제와 관련이 없습니다. – HTNW
@HTNW 위의 주 파일로 편집 됨 – nickoba