Еще один нубский вопрос. Есть задача:
Есть стена из н*н кирпичей, одни из которых желтые, другие белые. У рабочего кривая кисточка, и когда он красит один кирпич, то кирпичи сверху, снизу, справа и слева меняют свой цвет. Надо найти минимальное количество кирпичей, которые необходимо покрасить, чтобы закрасить всю стену.
Ввод:
количество стен
размер стены
сама стена
ПРИМЕР
2
3
yyy
yyy
yyy
5
wwwww
wwwww
wwwww
wwwww
wwwww
Вывод:
число кирпичей построчно, если нет вариантов - то 'inf'
Вот что я смог выдать пока, что, собственно, почти ничего:
Код:
#include<iostream>
#include<string>
using namespace std;
void paint(char arr[15][15], int x, int y)
{
arr[x][y] = 1-arr[x][y];
arr[x-1][y] = 1-arr[x-1][y];
arr[x+1][y] = 1-arr[x+1][y];
arr[x][y-1] = 1-arr[x-1][y];
arr[x][y+1] = 1-arr[x-1][y];
}
int main()
{
int n, size;
char pict[15][15];
int i, j;
cin>>n;
while(n--)//big loop
{
cin>>size;
for (i=0; i<size; i++)//grid input, substituting y and w for 1 and 0
for (j=0; j<size; j++)
{
cin>>pict[i][j];
if (pict[i][j]=='y')
pict[i][j] = 1;
else pict[i][j] = 0;
}
for(i=0; i<size; i++)
{
if(pict[0][i]==0)
paint(pict, 0, i);
}
return 0;
}
Проблема в последнем недописанном цикле - не знаю, как его дописывать =). С логикой вроде разобрался - проэнумерировать (?) первую строчку, перебрать все возможные варианты - а остальные сделать, основываясь на первой. Только как это выполнить программно - не понимаю. Техника, которую проходили, называется Enumeration - но ввиду многозначности слова ничего достойного не нагуглил.
З.Ы. Вы уж извините, просто я учу всю эту радость на китайском - поэтому многого на лекциях по программированию не усваиваю. Приходиться как-то самому. Хорошо говорить это одно, а слушать (и понимать) на паре по с++ - это, к сожалению, другое =(
Может еще посоветуете какой хороший ресурс или книгу с разбором задач по програмированнию?