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


           

не содержит некоторых частностей, которые



{ 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)) // присоединено - попытка вывести


Содержание  Назад  Вперед