Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 27.12.2015
Сообщений: 8
1

Из набора названий городов построить цепочку максимальной длины

05.07.2018, 17:52. Показов 3116. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача: Широко известна игра "Города". Называется какой-нибудь город, допустим, "Саратов". Кончается на "в", значит требуется назвать другой город,у которого в названии первая буква "в". Это может быть "Воронеж". Следующий город должен начинаться на "ж" и т.д. Запрещено повторять название городов. Надо написать программу, которая из набора названий городов (все названия разные) строит цепочку максимальной длины.

Код на паскале:


Pascal
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
program towns;          { "Города". Решение А.Никитина, Самара  }
const mnt         = 20; { максимальное количество слов на входе }
var   list,chain,store :array [1..mnt] of string; { для списка и цепочек }
      numin       :integer; { реальное количество слов на входе }
      pc          :integer; { Указатель на хвост цепочки }
      ml          :integer; { Длина наибольшей цепочки }
      sym         :char;    { Первичная буква для перебора }
 
procedure read_data; { Начальные установки и чтение данных }
var i : integer;
begin
     pc:=0; ml:=0; numin:=0;
     assign(input,'TOWN.IN'); reset(input);
     fillchar(chain,sizeof(chain),0);
     readln(numin);
     if (numin > mnt) then numin:=mnt;
     for i:=1 to numin do readln(list[i]);
     close(input);
end;
procedure write_results; { Запись результатов в файл }
var i : integer;
begin
     assign(output,'TOWN.OUT'); rewrite(output);
     writeln(ml);
     if (ml > 0) then begin
        for i:=1 to ml do writeln(store[i]);
     end;
     close(output);
end;
procedure store_chain; { Запоминаем только более длинную цепочку }
var i:integer;
begin
     if (pc>ml) then begin
        store:=chain;
        ml:=pc;
     end;
end;
{ Возвращает указатель названия по 1-й букве, 0 - такого элемента нет }
function find_next_item( c:char; n:integer ):integer;
var i:integer;
begin
    i:=1; find_next_item:=0;
    while (i <= numin) and (n > 0) do begin
       if (list[i][1]=c) then dec(n);
       inc(i);
    end;
    if (n=0) then find_next_item:=pred(i);
end;
{ Алгоритм построения цепочек. }
procedure build_chain( c:char; n:integer ); { Метод: перебор с возвратом.  }
var i:integer;                              { Известен как "back-tracking" }
begin
    i:=find_next_item(c,n);
    if (i > 0) then begin
       inc(pc); chain[pc]:=list[i]; list[i][1]:='X'; { вычеркиваем }
       build_chain(list[i][length(list[i])], 1);
       dec(pc); list[i][1]:=c; { возвращаем }
       build_chain(c, n+1);
    end else store_chain;
end;
 
begin
     read_data;
     for sym:='А' to 'Я' do build_chain(sym,1);
     write_results;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2018, 17:52
Ответы с готовыми решениями:

составить цепочку максимальной длины по правилу
Задан набор неповторяющихся пар (Ai,Aj), Ai, Aj принадлежат множеству А={A1, A2, ..., An}....

Из элементов множества составить цепочку максимальной длины по заданному правилу
помогите решить задачу. Задан набор неповторяющихся пар (Ai,Aj), Ai, Aj принадлежат множеству...

В одномерном массиве найти цепочку максимальной длины из четных элементов
Нужно написать: целочисленный массив из n элементов, заполненный случайными числами от a до b,...

Отыскать в массиве “цепочку возрастания” максимальной длины, и распечатать адреса входящих в нее элементов
На вход подается двумерный числовой массив. Написать программу , которая отыщет в массиве “цепочку...

2
0 / 0 / 0
Регистрация: 05.07.2018
Сообщений: 6
05.07.2018, 20:12 2
Список городов?
0
0 / 0 / 0
Регистрация: 27.12.2015
Сообщений: 8
05.07.2018, 22:23  [ТС] 3
/dell

Добавлено через 34 секунды
Новосибирск, Астрахан, Самара, Владимир, Киров
0
05.07.2018, 22:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2018, 22:23
Помогаю со студенческими работами здесь

Построить из набора слов любую цепочку, чтобы символ в конце слова совпадал с символом в начале следующего
Задан набор слов. Построить из них любую цепочку таким образом, чтобы символ в конце слова совпадал...

Найти в матрице "цепочку возрастания" максимальной длины
найти в двумерном массиве цепучку возратания(нужно отыскать в массиве “цепочку возрастания”...

Из слов заданного текста составить цепочку слов максимальной длины
задача: Из слов заданного текста составить цепочку слов максимальной длины, в которой каждое...

Рекурсия: составить цепочку максимальной длины по правилам игры "Города"
Задача: Задана последовательность названий городов. Составить цепочку максимальной длины по...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru