using namespace std; int n,m; int OK; int x[400],y[400]; unsigned int a[20][20],b[20][20]; void place(int depth) { if (depth == m*n) OK = 1; for (int i=0;i { for (int j=0;j { if (OK) return; if (b[i][j] == 0 ) continue; if (a[i][j] > b[i][j]) return; if (a[i][j] == b[i][j]) { b[i][j] = 0; if (i > 0) if (b[i-1][j]) b[i-1][j]--; if (i if (j > 0) if (b[i][j-1]) b[i][j-1]--; if (j x[depth] = i; y[depth] = j; place(depth+1); return; } } } for (int i=0;i { for (int j=0;j { if (OK) return; if (b[i][j] == 5 && a[i][j]==1) { a[i][j] = 5; place(depth); a[i][j] = 1; } } } } int main() { cin>>n>>m; for (int i=0;i { for (int j=0;j { cin>>a[i][j]; b[i][j] += 5; b[i][j] -= (i==0) + (i==n-1) + (j==0) + (j==m-1); } } place(0); if (!OK) cout<<"No"; else { cout<<"Yes"< for (int i=0;i { cout< } } return 0; }#include массив b - максимально возможное количество бактерий в этой клетке. 1 сама + 4 соседа если = 0 , то уже пройденная клетка ясно что если количество бактерий совпадает с максимальным количеством, то заселение в этой клетке должно произойти раньше, чем в соседних если бактерий больше чем максимум, то аборт. изза вымирания отдельный цикл - предположения что там было 5 бактерий.