1.夹吃棋 132
对于3X3区域中十字部分进行检查(水平+垂直)
#include <iostream>
#include <vector>
#include <string>
using namespace std;
bool is_captured(const vector<string>& board, int x, int y, char color) {
if (board[x][y] != color) return false;
// 水平方向判断
if (y > 0 && y < 2 && board[x][y - 1] == board[x][y + 1] && board[x][y - 1] != color && board[x][y - 1] != '.')
return true;
//垂直方向判断
if (x > 0 && x < 2 && board[x - 1][y] == board[x + 1][y] && board[x - 1][y] != color && board[x - 1][y] != '.')
return true;
return false;
}
string check_winner(const vector<string>& board) {
bool black_captured = false;
bool white_captured = false;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
if (board[i][j] == '*') {
if (is_captured(board, i, j, '*')) black_captured = true;
}
if (board[i][j] == 'o') {
if (is_captured(board, i, j, 'o')) white_captured = true;
}
}
}
if (black_captured && white_captured) return "draw";
if (black_captured) return "yukan";
if (white_captured) return "kou";
return "draw";
}
int main() {
int t;
cin >> t;
while (t--) {
vector<string> board(3);
for (int i = 0; i < 3; ++i) {
cin >> board[i];
}
cout << check_winner(board) << endl;
}
return 0;
}