Информатика и технология программирования


Линейный кроссворд - часть 2



{ int n; // результат - можно присоединить


// оставшиеся


// проверка условия завершения рекурсии


// - все слов из w[] присоединены


for (n=0; w[n]!=NULL;n++)
{ // проверка на присоединение


char *pw; // очередного слова


if (*w[n]==0) continue;
pw=w[n]; // пустое слово - пропустить


w[n]=""; // исключить проверяемое слово из


// множества


{ // попытка присоединить слово


if (step(pw)) // - рекурсивный вызов


{ ...
return 1; // удача - завершить успешно


}
}
w[n]=pw; // возвратить исключенное слово


} // неудача - нельзя присоединить


return 0; // ни одного слова


}

Данный " набросок" не содержит некоторых частностей, которые не меняют общей картины :



проверка условия завершения рекурсии - если массив указателей содержит только пустые строки, то рекурсивная последовательность шагов завершена успешно (все слова выбраны на предыдущих шагах) ;



проверка совпадения " хвоста" очередного слова и начала выбираемого на текущем шаге - делается отдельной функцией ;



сама цепочка выбранных слов выводится в процессе " ретрансляции" положительного результата непосредственно на экран в обратном порядке (что не совсем " красиво" ). В принципе она может быть сформирована и в глобальных данных.


//------------------------------------------------------bk54-03.cpp


&#35include &#60iostream.h&#62
&#35include &#60string.h&#62
char *w[]={"РАСИСТ","МАТРАС","МАСТЕР","СИСТЕМА","СТЕРВА",
NULL};


int step(char *lw) // параметр - текущее слово цепочки


{ int n;
for (n=0; w[n]!=NULL;n++)
if (*w[n]!=0) break;
if (w[n]==NULL) // цепочка выстроена, все слова


return 1; // из w[] присоединены


for (n=0; w[n]!=NULL;n++)
{ // проверка на присоединение


char *pw; // очередного слова


if (*w[n]==0) continue;
pw=w[n]; // пустое слово - пропустить


w[n]=""; // исключить проверяемое слово из


if (TEST(lw,pw)) // множества


{ // попытка присоединить слово


if (step(pw)) // присоединено - попытка вывести




Начало  Назад  Вперед



Книжный магазин