Форум программистов, компьютерный форум, киберфорум
Наши страницы

Цепочка слов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ растолкуйте про хэш плиз http://www.cyberforum.ru/cpp-beginners/thread344583.html
на картинке реализация поиска в "hash_map" от Страуструпа. И все бы хорошо если бы не один момент. b и v это векторы. И доступ по индексу в векторе ассоциируется у меня с чем то упорядоченным,...
C++ Вопросы на логику Добрый день форумчане.... не смогли бы вы задать вопросов на логику или программ каких нибудь? хочу проверить себя... как хорошо соображает голова.... только предупреждаю интернет медленный... http://www.cyberforum.ru/cpp-beginners/thread344577.html
Получить последовательность C++
Решить с помощью списков: 1.Даны натуральное число n, действительные числа a1,..., an. Вычислить: Sqrt(10+(a1)^2)+...+sqrt(10+(an)^2) 2.Даны натуральное число n, действительные числа r1, ...,...
C++ Построить ломаную по заданным вершинам
Помогите решить несколько задач по Си: 1.Дан файл f, компоненты которого являются целыми числами. Найти:количество квадратов нечетных чисел среди компонент. 2.Дан текстовый файл f. Записать в...
C++ Копирующий конструктор класса, содержащего переменную-член указатель http://www.cyberforum.ru/cpp-beginners/thread344491.html
Практикуюсь по книге Стенли Липпмана "Язык программирования C++ вводный курс" 4 изд. Упражнение 13.4. Используя приведенный ниже набросок класса, напишите конструктор копий, который копирует все его...
C++ Не работает отправка письма Добрый вечер. Помогите советом. Код: IdSMTP1->UserId = "stas67@yandex.ru"; IdSMTP1->Password = "*******"; IdSMTP1->Host = "smtp.yandex.ru"; подробнее

Показать сообщение отдельно
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,385
Записей в блоге: 2
Завершенные тесты: 1
24.08.2011, 12:14
Цитата Сообщение от Tokez Посмотреть сообщение
Задача: Цепочка слов.
Вход – файл на диске in4.dat. состоящий из слов. Разделенных пробелами два последних слова символьное изображение чисел.
Выход – на экран дисплея.
Дано множество слов одинаковой длины, из них два слова выделены (выделенным словам соответствуют их номера, записанные в конце файла in4.dat). Построить цепь от первого выделенного слова ко второму так, чтобы все слова этой цепи были только из заданного множества слов и отличались от соседних элементов только одним символом. Например, если дано множество тор вол сын воз сор вор рот сыр сон (файл in2.dat: тор вол сын воз сор вор рот сыр сон 2 8) или (файл in2.dat : tor vol syn voz sor vor rot syr son 2 8), то на экране можно вывести цепь: вол вор сор сыр или vol vor sor syr.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<iostream>
#include<string>
#include<sstream>
#include<list>
#include<iterator>
#include<algorithm>
 
int operator-(std::string left,std::string right){
    std::string::iterator it=right.begin();
    return std::count_if(left.begin(),left.end(),[&it](char ch){return *it++!=ch;});
}
 
std::string chainWords(std::list<std::string>words, std::string s){
    words.remove(s);
    std::list<std::string>::reverse_iterator it=words.rbegin();
    std::string str;
    while(true){
        while(it!=words.rend() && *it-s!=1)++it;
        if(it!=words.rend()){
            if(*it==words.back())
                return s+=(" "+*it);
            if((str=chainWords(words,*it))!="")
                return s+=(" "+str);
            ++it;
        }
        else return "";
    }
}
 
int main(){
    std::string str="vol syn voz sor vor rot syr";//будем считать, что мы уже прочитали строку из файла и разобрались с диапазоном
    std::istringstream in(str);
    std::list<std::string> wordList;
    std::copy(std::istream_iterator<std::string>(in),std::istream_iterator<std::string>(),std::back_inserter(wordList));
    std::string res=chainWords(wordList,*wordList.begin());
    std::cout<<(res!="" ? std::string("Result : "+res) : "Can't find result")<<std::endl;
    return 0;
}
Цитата Сообщение от Tokez Посмотреть сообщение
ЧЕРЕЗ КОММЕНТЫ ОПИШИТЕ ПРОГРАММУ ГДЕ ЧТО ДЕЛАЕТСЯ!!!!!!!
Справку смотри тут
Так же, чтоб понять алгоритм, погугли "поиск (перебор) с возвратом" или "backtracking".
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.