// minimax full search example
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
// 가로 3, 세로 3 바둑판일 경우
// 0~8 총 9개의 자리가 있다. (자리 번호를 0번~8번이라 할경우)
// 내가 처음 놓는 자리를 정했을 때 컴퓨터와 번갈아 놓을 수 있는
// 모든 경우의 수를 minimax full search하여 출력한다.
// 0: empty, 1: human, 2: computer
int board[9] = {0,};
int numberOfCases = 0;
void printLog(int depth, int *log)
{
for (int i=0; i<depth; ++i) {
cout<<log[i];
if (0 == i) {
cout<<" -> ";
} else {
cout<<" ";
}
}
cout<<endl;
}
bool isFull()
{
for(int i=0; i<9; ++i) {
if (board[i] == 0) {
return false;
}
}
return true;
}
int minimax(bool flag, int depth=1, int* log=nullptr)
{
if(true == isFull()) {
printLog(depth, log);
numberOfCases ++;
return 0;
}
for (int i = 0; i < 9; ++i) {
if (board[i] != 0) continue;
if(true == flag) { // computer turn
board[i] = 2;
log[depth] = i;
minimax(!flag, depth+1, &log[0]);
} else { // human turn
board[i] = 1;
log[depth] = i;
minimax(!flag, depth+1, &log[0]);
}
board[i] = 0;
}
return 0;
}
int main(int argc, const char * argv[]) {
cout<<"----------- minimax full search example ---------------"<<endl;
int move;
do {
cout<<endl<<"Enter the move(0-8):";
cin>>move;
} while(move < 0 || move >= 9 || 0 != board[move]);
board[move] = 1;
vector<int> log(9, 0);
log[0] = move;
minimax(true, 1, &log[0]);
cout << "number of cases : " << numberOfCases << endl;
return 0;
}
2020/05/19 - [AI/Algorithm] - minimax, alpha-beta pruning
2020/05/19 - [iOS/Tips] - Bitbucket Carthage 사용
2020/05/19 - [iOS/Jailbreak] - Fridump 사용법 (3/3) - 메모리 덤프
2020/05/19 - [iOS/Jailbreak] - Fridump 사용법 (2/3) - Mac OS X 환경 구축
2020/05/19 - [iOS/Jailbreak] - Fridump 사용법 (1/3) - iOS디바이스 환경 구축
2020/05/19 - [iOS/Jailbreak] - Fridump, Tcpdump, OpenSSL Quick Guide
2020/05/19 - [OS/Mac OS X] - gdb 사용
2020/05/19 - [iOS/Jailbreak] - Frida 설치 및 사용법
2020/05/19 - [OS/Mac OS X] - gdb 설치
2020/05/19 - [OS/Mac OS X] - Mac에서 Node.js 설치
2020/05/19 - [iOS/Jailbreak] - Tcpdump 사용법
2020/05/19 - [개발노트] - UUID의 구성 요소
2020/05/18 - [iOS/Tips] - APNs
2020/05/18 - [iOS/Swift] - Multiple font colors in a single UILabel
'개발 > AI,ML,ALGORITHM' 카테고리의 다른 글
Neural Network (XOR) (0) | 2022.11.18 |
---|---|
2D 충돌처리 (0) | 2020.12.12 |
Generic algorithm (0) | 2020.05.19 |
neural network (0) | 2020.05.19 |
minimax, alpha-beta pruning (0) | 2020.05.19 |