対戦(宝石迷陣Bejeweled)ゲームの解のアルゴリズムに対して


#include =
using namespace std;

const int nGridCount = 8;

int s_color[nGridCount][nGridCount] = {
    34, 92, 26, 34, 93, 10, 34, 39,
    10, 10, 34, 39, 15, 15, 39, 93,
    15, 26, 26, 93, 93, 39, 10, 15,
    26, 34, 39, 15, 39, 34, 34, 26,
    34, 39, 39, 34, 52, 26, 10, 10,
    26, 34, 10, 15, 52, 52, 15, 39,
    93, 15, 26, 26, 15, 39, 93, 93,
    34, 52, 93, 10, 93, 10, 39, 26
};

#define OUTPUT_PAIR(x1, y1, x2, y2) printf("(%d, %d), (%d, %d)
", x1, y1, x2, y2);\ printf("%d %d
", s_color[x1][y1], s_color[x2][y2]) int main() { // for (int i = 0; i < nGridCount; i++) { for (int j = 0; j < nGridCount - 1; j++) { // xx | x | xx | x | x xx | xx x // x | xx | x | xx | | if ( s_color[i][j] == s_color[i][j+1]) { // ? // xx // ? if (i - 1 >= 0 && j + 2 < nGridCount && s_color[i-1][j+2] == s_color[i][j]) { OUTPUT_PAIR(i, j+2, i-1, j+2); } if (i + 1 < nGridCount && j + 2 < nGridCount && s_color[i+1][j+2] == s_color[i][j]) { OUTPUT_PAIR(i, j+2, i+1, j+2); } // ? // xx // ? if (i - 1 >= 0 && j - 1 >= 0 && s_color[i-1][j-1] == s_color[i][j]) { OUTPUT_PAIR(i, j-1, i-1, j-1); } if (i + 1 < nGridCount && j - 1 >= 0 && s_color[i+1][j-1] == s_color[i][j]) { OUTPUT_PAIR(i, j-1, i+1, j-1); } // ? xx ? if (j - 2 >= 0 && s_color[i][j-2] == s_color[i][j]) { OUTPUT_PAIR(i, j-2, i, j-1); } if (j + 3 < nGridCount && s_color[i][j+3] == s_color[i][j]) { OUTPUT_PAIR(i, j+3, i, j+2); } } } // x x | x // x | x x for (int j = 0; j < nGridCount - 2; j++) { if (s_color[i][j] == s_color[i][j+2]) { if (i - 1 >= 0 && s_color[i][j] == s_color[i-1][j+1]) { OUTPUT_PAIR(i, j+1, i-1, j+1); } if (i + 1 < nGridCount && s_color[i][j] == s_color[i+1][j+1]) { OUTPUT_PAIR(i, j+1, i+1, j+1); } } } } puts("- - - - - - - - - - "); // for (int j = 0; j < nGridCount; j++) { for (int i = 0; i < nGridCount - 1; i++) { // x | x | x | x // x | x | x | x // x | x | x | x if ( s_color[i][j] == s_color[i+1][j]) { // x // x // ? ? if (j - 1 >= 0 && i + 2 < nGridCount && s_color[i+2][j-1] == s_color[i][j]) { OUTPUT_PAIR(i+2, j, i+2, j-1); } if (j + 1 < nGridCount && i + 2 < nGridCount && s_color[i+2][j+1] == s_color[i][j]) { OUTPUT_PAIR(i+2, j, i+2, j+1); } // ? ? // x // x if (j - 1 >= 0 && i - 1 >= 0 && s_color[i-1][j-1] == s_color[i][j]) { OUTPUT_PAIR(i-1, j, i-1, j-1); } if (j + 1 < nGridCount && i - 1 >= 0 && s_color[i-1][j+1] == s_color[i][j]) { OUTPUT_PAIR(i-1, j, i-1, j+1); } // ? xx ? if (i - 2 >= 0 && s_color[i-2][j] == s_color[i][j]) { OUTPUT_PAIR(i-2, j, i-1, j); } if (i + 3 < nGridCount && s_color[i+3][j] == s_color[i][j]) { OUTPUT_PAIR(i+3, j, i+2, j); } } } // x | x // x | x // x | x for (int i = 0; i < nGridCount - 2; i++) { if (s_color[i][j] == s_color[i+2][j]) { if (j - 1 >= 0 && s_color[i][j] == s_color[i+1][j-1]) { OUTPUT_PAIR(i+1, j, i+1, j-1); } if (j + 1 < nGridCount && s_color[i][j] == s_color[i+1][j+1]) { OUTPUT_PAIR(i+1, j, i+1, j+1); } } } } cin >> ws; }