Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 07.04.2019
Сообщений: 1
1

Задача про миссионеров и каннибалов

07.04.2019, 23:20. Просмотров 237. Ответов 0
Метки нет (Все метки)

Добрый день, форумчане!
Необходимо решить задачу про переправу миссионеров и каннибалов через реку путем поиска в глубину.
Есть код, но компиляцию не проходит.
Необходимо вернуть значение функции Trace.pop_back() и передать в Edit1

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
106
107
108
109
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit1.h" 
#include<iostream> 
#include<clocale> 
#include<conio.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 
//---------------------------------------------------------------------------
 
;}
 
void __fastcall TForm1::Edit1Change(TObject *Sender){
 
//---------------------------------------------------------------------------
 
;}
 
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 {
  enum BoatPos{LEFT, RIGHT};
  using namespace std;
   struct Situation
   {
        int LC, RC;
        int LM, RM;
        BoatPos Pos;
        String Move;   };
        Situation(int LC, int rc, int lm, int rm, BoatPos Pos, const string& move):
       LC(lc), RC(rc), LM(lm), RM(rm), Pos(pos),Move(move){}
        void Print()
        {
           cout << LC << ":" << LM << " - " << RC << " : " << RM << " ";
           cout << (Pos ==LEFT ? "left" : "right") << " (" << Move << ")\n";
        }
 
       bool operator==(const Situation& rhs) const
       {
         return LC == rhs.LC && RC == rhs.RC && LM == rhs.LM
            && RM == rhs.RM && Pos == rhs.Pos;
 
 
  vector<Situation> Trace;
 
  void Slove (int LC, int RC, int LM, int RM, BoatPos Pos, const string Move = "")
  {
    if ((LC > LM && LM > 0) || (RC > RM && RM > 0) || LC < 0 || RC < 0 || LM <
        0 || RM < 0 || find(Trace.begin(), Trace.end(),
        Situation (LC, RC, LM, RM, Pos, "")) != Trace.end())
          return;
 
    Trace.push_back(Situation (LC, RC, LM, RM, Pos,Move));
 
    if (RC == 3 && RM == 3)
    {
       for_each(Trace.begin(), Trace.end(), mem_fun_ref(&Situation::Print));
       exit(0);
    }
 
    if (Pos == LEFT)   //лодка на левом берегу
    {
      //два людоеда
      Solve (LC - 2, RC + 2, LM, RM, RIGHT, "CC");
      //людоед и миссионер
      Solve (LC - 1, RC + 1, LM - 1, RM + 1, RIGHT, "CM");
      //два миссионера
      Solve (LC, RC, LM - 2, RM + 2, RIGHT, "MM");
      //один людоед
      Solve (LC - 1, RC + 1, LM, RM, RIGHT, "C");
      //один миссионер
      Solve (LC, RC, LM - 1, RM + 1, RIGHT, "M");
    }
    else if (Pos == RIGHT)       //лодка на правом берегу
    {
      //два людоеда
      Solve (LC + 2, RC - 2, LM, RM, LEFT, "CC");
      //людоед и миссионер
      Solve (LC + 1, RC - 1, LM + 1, RM - 1, LEFT, "CM");
      //два миссионера
      Solve (LC, RC, LM + 2, RM - 2, LEFT, "MM");
      //один людоед
      Solve (LC + 1, RC - 1, LM, RM, LEFT, "C");
      //один миссионер
      Solve (LC, RC, LM + 1, RM - 1, LEFT, "M");
    }
 
    Trace.pop_back();
  }
 
 int main (int argc, char* argv[])
 {
   Solve(3, 0, 3, 0, LEFT);
   return 0;    }
 }
}; ;}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2019, 23:20
Ответы с готовыми решениями:

Задача Про миссионеров и ганнибалов
Постановка задачи такая: Три миссионера и три каннибала хотят переправиться с левого берега на...

Задача про взлом кода из книги Эрика Фримена про основы javascript в конце 5 главы.
читаю книгу Эрика Фримена про основы javascript.В конце 5 главы есть задачка про взлом кода.Никак...

Задача на перебор вариантов. Задача Л.Эйлера. Про чиновника
Задача Л.Эйлера. Некий чиновник купил лошадей и быков на сумму 1770 талеров. За каждую лошадь он...

Переместить миссионеров и людоедов на другой берег реки
Племя из М миссионеров и L людоедов находится по одну сторону реки, через которую необходимо...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2019, 23:20

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

Задача про IP
Простите что не совсем в тему , но у меня ответ 97.15.81.53/15 , но говорят это неправильно ...

Задача про шары
Уважаемые форумчане! Помогите пожалуйста с решением следующей задачи: В ящике 10 красных, 15...

Задача про плитки
Современная экзаменационная задача про плитки... Нужно переделать данный код в обычный код pascal...

Задача про ферзя
Помогите, пожалуйста. Нужно составить программу, которая проверяет, что два ферзя, расположенные на...

Задача про Незнайку
Незнайка считает, что операция «увеличить» число означает увеличить каждую его цифру, а может быть...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.