Код:
bool valid(int i, int j)
{
return i > 0 && i < m && j > 0 && j < n;
}
// элементы игрового поля (пусто, крестик, нолик)
enum XO { _e_, _x_, _o_ };
const XO f[m][n];
XO field(int i, int j) { return valid(i,j) ? f[i][j] : _e_; }
XO test()
{
// ранг каждой клетки
struct RANK
{
int hor, ver, diag1, diag2;
};
RANK r[m][n];
const RANK rnull = { 0, 0, 0, 0 };
int i,j;
for(i = 0; i < m; ++i) for(j = 0; j < n; ++j)
{
XO xo = f[i][j];
RANK& rr = r[i][j];
if(xo == _e_) { rr = rnull; continue; }
if(xo == field(i-1, j )) = 1 + r[i-1][j ];
if(xo == field(i, j-1)) rr.ver = 1 + r[i ][j-1];
if(xo == field(i-1, j-1)) rr.diag1 = 1 + r[i-1][j-1];
if(xo == field(i+1, j-1)) rr.diag2 = 1 + r[i+1][j-1];
if(rr.hor >= 5
|| rr.ver >= 5
|| rr.diag1 >= 5
|| rr.diag2 >= 5
)
return xo; // этот игрок победил
}
return _e_; // ничья
}
не пойму чего не хватает
Суть задания:
клеточное поле размером м*n есть результат игры в крестики-нолики на неограниченном поле. Проверить является ли конфигурация одного из игроков предвыигрышной, т.е. нельзя ли за один ход достичь победы