0 / 0 / 0
Регистрация: 25.05.2021
Сообщений: 17
1

Нужно создать рекурсивную функцию перебора с возвратом для игры в слова

13.04.2022, 17:11. Показов 138. Ответов 0

Доброго времени суток. Суть задания такова, что дается файл с набором слов, которые использовали для игры в слова и вот нужно составить правильный порядок (решение всегда есть). STL использовать нельзя.
Слова из файла я запихал в созданный список и вот осталось написать функцию для подбора верного решения, вроде как.
Попробовал сделать, но повылезало куча ошибок, вот мой код. Язык с++
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "iostream"
#include "fstream"
#include "string"
 
using namespace std;
int i = 0;
 
struct list
{
    string word; // поле данных
    list* next; // указатель на следующий элемент
    list* prev; // указатель на предыдущий элемент
};
 
struct list* init(string a)  // а- значение первого узла
{
    struct list* lst;
    // выделение памяти под корень списка
    lst = new list;
    lst->word = a;
    lst->next = NULL; // указатель на следующий узел
    lst->prev = NULL; // указатель на предыдущий узел
    return(lst);
}
 
struct list* addelem(list* lst, string wordd)
{
    struct list* temp, * p;
    temp = new list;
    p = lst->next; // сохранение указателя на следующий узел
    lst->next = temp; // предыдущий узел указывает на создаваемый
    temp->word = wordd; // сохранение поля данных добавляемого узла
    temp->next = p; // созданный узел указывает на следующий узел
    temp->prev = lst; // созданный узел указывает на предыдущий узел
    if (p != NULL)
        p->prev = temp;
    return(temp);
}
 
void listprint(list* lst)
{
    struct list* p;
    p = lst;
    do {
        cout << p->word << ' '; // вывод значения элемента p
        p = p->next; // переход к следующему узлу
    } while (p != NULL); // условие окончания обхода
}
 
void per(list* lst, string* rez, list* nexte)
{
    string start = lst->word;
    string nexxt = nexte->word;
    char start_char, nexxt_char;
    rez[0] = start; i++;
    start_char = start[-1];
    nexxt_char = nexxt[0];
    if (start_char == 'ь' or start_char == 'ъ')
        start_char = start[-2];
    if (start_char == nexxt_char)
    {
        rez[i] = lst->word; i++;
        per(lst->next, rez, nexte->next);
    }
    else
    {
        if (find(rez[0], rez[-1], nexxt) == rez[-1])
        {
            per(lst, rez, nexte->next);
        }
        else
        {
            per(lst, rez, nexte->next);
        }
    }
    return;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    ifstream fin("C:\\aipinput.txt");
    int n = 0;
    string s;
 
    while (!fin.eof())
    {
        getline(fin, s, ' ');
        n++; // кол-во слов в файле.
    }
    fin.seekg(0);
    string* rez = new string[n];
 
    string* words = new string[n]; // массив слов.
    for (int i = 0; !fin.eof(); i++)
        fin >> words[i];
    list *lst = init(words[0]);
    for (int i = 1; i < n; i++)
    {
        addelem(lst, words[i]);
    }
    listprint(lst);
    cout << endl;
    per(lst, rez, lst->next);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2022, 17:11
Ответы с готовыми решениями:

Создать рекурсивную, возвращающую значение, не рекурсивную и рекурсивную функцию типа void
Найти n-й член последовательности Фибоначчи. Последовательность задается следующим образом: a1=1;...

Описать рекурсивную функцию перебора листьев дерева
Опишите рекурсивную функцию, выводящую на печать информационные поля и ключи всех листьев дерева....

Нужно написать функцию перебора всех возможных комбинаций для решения головоломки
Дана головоломка как на фото в приложении. Нужно сделать программу которая поможет найти все...

Создать рекурсивную функцию для вычисления х(10)
Пусть х0=1, xi=xi-1+2i, где i=2,3.. Найти x10

Создать рекурсивную функцию для вычисления члена
Создать рекурсивную функцию для вычисления члена следующей последовательности.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.04.2022, 17:11
Помогаю со студенческими работами здесь

Создать рекурсивную функцию для вычисления члена последовательности
создайте рекурсивную функцию для вычисления члена следующей последовательности, также напишите...

Создать рекурсивную функцию для вычисления значения цепной дроби
Создать рекурсивную функцию, которая для заданного целого n определяет определяет цепную дробь...

Создать рекурсивную функцию для расчёта n-го члена последовательности Фибоначчи
Всем привет, у меня проблема. Нужно в C++ написать программу, в которой нужно создать рекурсивную...

Метод перебора с возвратом
Рассмотрим множество B={b1, b2, ..., bn}, содержащее первые n букв латинского алфавита. Напишите...

Метод перебора с возвратом (2)
Дано n (n&lt;=30) кошельков, пронумерованных числами 1, 2, 3, ..., n. Кошелек с номером i, (i = 1, 2,...

Алгоритм перебора с возвратом
Доброго времени суток! Может пожалуйста кто-нибудь подсказать как сделать игру реверси 4х4 на java,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru