PROBLEME
Le Gomoku est un jeu de plateau à deux joueurs, dans lequel pour gagner, chaque joueur doit réussir à aligner 5 pions sur des cases consécutives d'un plateau, horizontalement, verticalement ou en diagonale. Le plateau est une grille carrée, de dimension quelconque.
Ecrivez un programme qui lit en entrée le contenu d'une partie de Gomoku, et détermine si l'un des joueurs a gagné.
CONTRAINTES
1 <= N <= 40, où N est le nombre de lignes/colonnes du plateau utilisé pour la partie.
ENTREE
La première ligne de l'entrée contient un entier N : le nombre de colonnes et de lignes du plateau de Gomoku.
Chacune des N lignes suivantes contient N entiers, séparés par des espaces, correspondant au contenu des cases d'une ligne du plateau. L'entier vaut 0 si la case est vide, 1 si elle contient un pion du joueur 1, et 2 pour un pion du joueur 2.
SORTIE
Votre programme doit afficher une ligne contenant un entier : le numéro du joueur gagnant (1 ou 2), ou 0 si aucun des joueurs n'a aligné 5 pions.
CODE SOURCE
Code: C++ #include <cstdio> unsigned int N; unsigned int plateau[40][40]; void lire_plateau() { scanf_s("%u", &N); for (unsigned int y=0; y<N; y++) for (unsigned int x=0; x<N; x++) scanf_s("%u", &plateau[x][y]); } bool joueur_gagnant(unsigned int joueur) { if (N < 5) return false; for (unsigned int y=0; y<N; y++) { for (unsigned int x=0; x<N-4; x++) { bool r = true; for (int i=0; i<5; i++) if (plateau[x+i][y] != joueur) r = false; if (r) return true; } } for (unsigned int x=0; x<N; x++) { for (unsigned int y=0; y<N-4; y++) { bool r = true; for (int i=0; i<5; i++) if (plateau[x][y+i] != joueur) r = false; if (r) return true; } } for (unsigned int y=0; y<N-4; y++) { for (unsigned int x=0; x<N-4; x++) { bool r = true; for (int i=0; i<5; i++) if (plateau[x+i][y+i] != joueur) r = false; if (r) return true; } } for (unsigned int y=0; y<N-4; y++) { for (unsigned int x=0; x<N-4; x++) { bool r = true; for (int i=0; i<5; i++) if (plateau[x+i][y+4-i] != joueur) r = false; if (r) return true; } } return false; } int main(int argc, char* argv[]) { lire_plateau(); if (joueur_gagnant(1)) printf("1\n"); else if (joueur_gagnant(2)) printf("2\n"); else printf("0\n"); return 0; }
|