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

Графы (Гамильтонов цикл)

03.06.2013, 01:58. Показов 3847. Ответов 27
Метки нет (Все метки)

Доброй ночи! Не сплю вторую ночь. Не могу адекватно впихнуть код программы в C++ Builder и меня это уже бесит и я скоро умру, если дело не пойдет дальше. Помогите...

Вот какая должна получиться прога в результате..

Графы (Гамильтонов цикл)



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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#include <vcl.h>    //необходимые директивы
#pragma hdrstop
#include "Main.h"
#include <stdio.h>
#pragma package(smart_init)
#pragma resource "*.dfm"
TF_Main *F_Main;    //указатель на форму
int numev=0;    //счетчик, необходимый для смены состояний построения графа
int xy[2][50];  //массив для хранения координат вершин на экране
int kv = 0; //количество вершин
int line;   //переменная, необходимая для формирования матрицы смежности
bool select=false;  
char **matrix;      //выделение памяти для будущей матрицы смежности
AnsiString way; //строка для вывода результатов в файл и на экран
int *buf;   //указатель на буфер
bool mark=false;
int kvdel=0;
FILE *F;    //указатель на файл для вывода промежуточных результатов
//---------------------------------------------------------------------------
__fastcall TF_Main::TF_Main(TComponent* Owner)
        : TForm(Owner)
{     Status->Caption="Статус:\n\n...отмечаем вершины..."; //начальный статус
}
//---------------------------------------------------------------------------
// функция построения графа на компоненте TImage
void __fastcall TF_Main::DeskClick(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
        if (numev==0)   //если нажатий на кнопку «Далее» не производилось, то
        {
 
                Desk->Canvas->Pen->Color=clBlack;   //цвет=черный
                Desk->Canvas->Pen->Width=10;    //толщина пера=10 пикселей
                Desk->Canvas->MoveTo(X,Y);  //ставится точка
                Desk->Canvas->LineTo(X,Y);
                xy[0][kv]=X; //координаты вершины заносятся в массив
                xy[1][kv]=Y;
                Desk->Canvas->TextOutA(X+10, Y+10, AnsiString(kv=kv+1));
        //рядом выводится номер вершины
        }
        if (numev==1) //построение ребер
        {
            for (int i=0; i<kv; i++)
            {
                if ((X>(xy[0][i]-5))&&(X<(xy[0][i]+5)))
                {
                    if ((Y>(xy[1][i]-5))&&(Y<(xy[1][i]+5)))
                    {
                        if (select==false) //если вершина отмечена первой
                        {
                            Desk->Canvas->Pen->Color=clGray; //отметить ее серым цветом
                            Desk->Canvas->Pen->Width=7;
                            Desk->Canvas->MoveTo(xy[0][i],xy[1][i]);
                            Desk->Canvas->LineTo(xy[0][i],xy[1][i]);
                            line=i; //занести в переменную номер вершины
                            select=true; //поставить отметку, что одна вершина уже выделена
                        }
                        else //иначе
                        {
                            Desk->Canvas->Pen->Color=clBlack;
                            Desk->Canvas->Pen->Width=10;
                            Desk->Canvas->MoveTo(xy[0][line],xy[1][line]);
                            Desk->Canvas->LineTo(xy[0][line],xy[1][line]);
                            Desk->Canvas->Pen->Width=3;
                            Desk->Canvas->LineTo(xy[0][i],xy[1][i]); //провести линию
                            matrix[line][i]=1; //поставить отметку о ребре в матрице смежности
                            matrix[i][line]=1;
                            select=false; //ребро построено, выделенных вершин нет
                        }
                        break; 
                    }
                }
            }
        }
}    
//---------------------------------------------------------------------------
//Функция обработки события кнопки «Далее»
void __fastcall TF_Main::BNextClick(TObject *Sender)
{
if (numev==0) //если нажатие производится в первый раз
{
    matrix=new char* [kv];  //создать массив для матрицы смежности
    for (int i=0; i<kv; i++) //обнулить этот массив
    {
        matrix[i]=new char [kv];
        for (int j=0; j<kv; j++)
        {
            matrix[i][j]=0;
        }
    }
    Status->Caption="Статус:\n\n...отмечаем ребра..."; //сменить статус
} 
if (numev==1) //повторное нажатие на кнопку
{
    Status->Caption="Статус:\n\n Готово!"; //смена статуса
    BNext->Enabled=false;
    ResCap->Caption="Результаты:";
    Gamilton(); //вывов функции Gamilton
}
numev++; //увеличение счетчика событий на единицу
}
//---------------------------------------------------------------------------
//Функция поиска гамильтоновых циклов
void __fastcall TF_Main::Gamilton(void)
{
    buf=new int[kv]; //создание буфера
    buf[0]=0;
    for (int i=0; i<kv; i++) //обнуление буфера
    {
        buf[i]=NULL;
    }
    
    F=fopen("Process.txt","wt"); //создание файла для записи
    Ways(0, 1); //вызов функции для поиска новых вершин в цепи
    
}
//---------------------------------------------------------------------------
// Функция для поиска новых вершин в цепи
void __fastcall TF_Main::Ways(int ver, int num)
{
    select=false;
    if (mark==true) //если вершины уже удалялись
    {
        kvdel=buf[num]; //начинать отсчет вершин с
    }
    else kvdel=0; //иначе обнулить этот счетчик
    mark=false;
    for (int i=kvdel; i<kv; i++)    //цикл поиска возможных вершин
    {
        if (matrix[ver][i]==0) continue; //если нет ребра, следующий
        if (Repeat(i,num)) continue;    //если вершина уже была, следующий
        if (i==buf[num]) continue;
        ver=i;
        select=true; //отметка, что вершину нашли
        break;
    }
    if (select==true)   //если вершина найдена
    {
        buf[num]=ver;   //добавить ее в цепь
            num++;  //увеличить счетчик
            Ways(ver, num); //рекурсивно вызвать с новыми параметрами
     }
    else    //если вершина не найдена
    {
        if (num==kv)    //если длина цепи равна количеству вершин
        {
            way=buf[0]+1;   
            for (int i=1; i<kv; i++)
            {
                way+=',';
                    way+=buf[i]+1;
            }
            if (matrix[buf[kv-1]][0]!=0) way+=",1";
            Results->Items->Add(way);   //вывод результата на экран
            way+='\n';
            fprintf(F,way.c_str()); //вывод в файл
        }
       way=buf[0]+1; 
        for (int i=1; i<num; i++)
            {
                way+=',';
                way+=buf[i]+1;
 
            }
            way+='\n';
             fprintf(F,way.c_str());   //вывод промежуточных результатов в файл
        num--;  //уменьшаем счетчик
        mark=false;
        if (num!=0) //если счетчик вершины не равен 0
        {
if (num!=kv-1) buf[num+1]=NULL; //и не равен количеству вершин, то обнулить
// следующую ячейку буфера
            mark=true;  //отметка о удалении вершины
            Ways(buf[num-1], num);  //поиск следующей вершины
        }
        else fclose(F); //все циклы найдены, закрыть файл
    }
}
//---------------------------------------------------------------------------
// Функция проверки на повторы вершин в цепи
int __fastcall TF_Main::Repeat(int i, int num)
{
    for (int j=0; j<num; j++)   //цикл поиска такой же вершины
    {
        if (buf[j]==i) return 1;    //если  такая найдена, то повтор есть
        }
    }
    return 0;   //нет повтора
}
Что я должен сделать для результативного ответа на мою тему?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2013, 01:58
Ответы с готовыми решениями:

Графы. Гамильтонов Цикл. Матрица смежности
Вот программа, которую я взял с поиска. Программа должна найти Гамильтонов цикл. #include...

Гамильтонов цикл
надо разобрать прогу.выявления Гамильтонова цикла в графе...

Гамильтонов цикл
из ребер двух гамильтоновых циклов можно составить еще один новый цикл. вопрос: а оставшиеся...

Гамильтонов цикл
Здравствуйте, есть такое задание: Определить функцию, на вход которой подается граф в виде ((a...

27
LK
Заблокирован
03.06.2013, 02:41 2
Цитата Сообщение от samalil Посмотреть сообщение
Что я должен сделать для результативного ответа на мою тему?
- предоставить все имеющиеся у вас материалы, в частности, файл Main.h, чтобы не угадывать, какие компоненты используются, указать, откуда берутся "координаты вершин", что-нибудь еще из имеющего отношение к вопрсу, это уже вам виднее.

В идеале, хорошо бы прикрепить имеющийся у вас проект, но, как я понимаю, именно в создании подобного проекта вы испытываете затруднения.

И, главное, понятно обяснить, что означает:
Цитата Сообщение от samalil Посмотреть сообщение
Не могу адекватно впихнуть код программы в C++ Builder
Если указанные данные будут предоставлены, могу попытаться вам помочь.
1
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 10
03.06.2013, 03:04  [ТС] 3
Грубо говоря, у меня есть только этот код и скрин. прошу что-нибудь ответить. спасибо
0
LK
Заблокирован
03.06.2013, 03:30 4
samalil, я уже пытаюсь воспроизвести, не обещаю, что будет быстро, но к утру будет, потому мой вам настоятельный совет - идите отдыхать, все остальное можно будет обсудить/уточнить утром, со мной, или другими пользователями.

Но сперва все же дайте мне ответ на вопрос: что означает:
Не могу адекватно впихнуть код программы в C++ Builder
? Вы не можете воспроизвести проект ? И второе: у вас C++ Builder 6 или другая версия?
2
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 10
03.06.2013, 03:36  [ТС] 5
Как так? отдыхать, когда совсем не знакомый человек сам не спит и пытается помочь?!
Я думал просто скопировать-вставить-запустить.. но данный алгоритм не сработал... нужно, как оказалось, еще и знать, как это делать.
Да, С++ 6
0
LK
Заблокирован
03.06.2013, 03:41 6
да, просто скопировать не получиться, но - не все так безнадежно, будем надеяться , только если есть ошибки в самом коде, то на данном этапе я их исправлять не обещаю.

samalil, то, что вы будете себя там изматывать бдением, будет только мешать, поскольку я буду спешить и не буду думать , а вам пользы и от того, и от другого - никакой, короче - марш спать .
1
LK
Заблокирован
03.06.2013, 06:25 7
Проектик сделал. Компилируется. Ошибок и предупрежений нет. Даже ставит точки, но ребра не рисует. Не вникал.

В оригинале отсутствует обработчик и код кнопки "Очистить".

В моем билдере в обработчике клика в имейдж нет в параметрах координат мышиного курсора, которые присутствуют в оригинале:
C++
1
2
3
// оригинал обработчика:
// функция построения графа на компоненте TImage
void __fastcall TF_Main::DeskClick(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
, использован обработчик нажатия клавиши мыши:
C++
1
2
// функция построения графа на компоненте TImage
void __fastcall TF_Main::DeskMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
Main.cpp
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
//---------------------------------------------------------------------------
 
#include <vcl.h> // необходимые директивы
#pragma hdrstop
#include <stdio.h>
 
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TF_Main *F_Main;
 
int numev = 0; // счетчик, необходимый для смены состояний построения графа
int xy[2][50]; // массив для хранения координат вершин на экране
int kv = 0; // количество вершин
int line; // переменная, необходимая для формирования матрицы смежности
bool select = false;
char **matrix; // выделение памяти для будущей матрицы смежности
AnsiString way; // строка для вывода результатов в файл и на экран
int *buf; // указатель на буфер
bool mark = false;
int kvdel = 0;
FILE *F; //указатель на файл для вывода промежуточных результатов
 
//---------------------------------------------------------------------------
__fastcall TF_Main::TF_Main(TComponent* Owner)
  : TForm(Owner)
{
  Status->Caption = "Статус:\n\n...отмечаем вершины..."; // TLabel Name=Status, начальный статус
// следующее можно укзать в Инспекторе Объектов, со своими параметрами
  F_Main->Height = 512; // TForm Neme=F_Main, Height
  F_Main->Width = 575; // TForm  Width
  F_Main->Caption = "Графы - Гамильтонов цикл"; // TForm Caption
  ResCap->Font->Style = ResCap->Font->Style << fsBold; // TLabe2 Name=ResCap
  ResCap->Caption = "Готово!";
  Desk->Align = alLeft; // TImage Name=Desk, Align
  Desk->Width = 400; // TImage Width
  Desk->Left = 406; // TImage Left
  Desk->Canvas->Brush->Color = Desk->Canvas->Brush->Color << clWhite;  // заливаем канву TImage белым
  BNext->Caption = "Далее"; // TButton Name=BNext
  BNext->Width = 150; // TButton Width
  BNext->Left = 406; // TButton Left
  BClear->Width = 150; // TButton Name=BClear, добавлена
  BClear->Left = 406; // TButton Left
  BClear->Caption = "Очистить"; // TButton Caption
  Results->Width = 150; // TMemo Name=Results, Caption
  Results->Left = 406; // TButton TMemo
}
//---------------------------------------------------------------------------
// функция построения графа на компоненте TImage
void __fastcall TF_Main::DeskMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
  if (numev==0) { // если нажатий на кнопку «Далее» не производилось, то
    Desk->Canvas->Pen->Color=clBlack; // цвет=черный
    Desk->Canvas->Pen->Width=10; // толщина пера=10 пикселей
    Desk->Canvas->MoveTo(X,Y); // ставится точка
    Desk->Canvas->LineTo(X,Y);
    xy[0][kv]=X; // координаты вершины заносятся в массив
    xy[1][kv]=Y;
    Desk->Canvas->TextOutA(X+10, Y+10, AnsiString(kv=kv+1));
    // рядом выводится номер вершины
  }
  if (numev == 1) { // построение ребер
    for (int i=0; i<kv; i++) {
      if ((X>(xy[0][i]-5))&&(X<(xy[0][i]+5))) {
        if ((Y>(xy[1][i]-5))&&(Y<(xy[1][i]+5))) {
          if (select==false) { // если вершина отмечена первой
            Desk->Canvas->Pen->Color = clGray; // отметить ее серым цветом
            Desk->Canvas->Pen->Width = 7;
            Desk->Canvas->MoveTo(xy[0][i],xy[1][i]);
            Desk->Canvas->LineTo(xy[0][i],xy[1][i]);
            line=i; // занести в переменную номер вершины
            select = true; // поставить отметку, что одна вершина уже выделена
          }
          else { //иначе
            Desk->Canvas->Pen->Color = clBlack;
            Desk->Canvas->Pen->Width = 10;
            Desk->Canvas->MoveTo(xy[0][line],xy[1][line]);
            Desk->Canvas->LineTo(xy[0][line],xy[1][line]);
            Desk->Canvas->Pen->Width = 3;
            Desk->Canvas->LineTo(xy[0][i],xy[1][i]); // провести линию
            matrix[line][i] = 1; // поставить отметку о ребре в матрице смежности
            matrix[i][line] = 1;
            select = false; // ребро построено, выделенных вершин нет
          }
          break;
        }
      }
    }
  }
}
//---------------------------------------------------------------------------
void __fastcall TF_Main::DeskClick(TObject *Sender)
{
// оригинал обработчика:
//void __fastcall TF_Main::DeskClick(TObject *Sender, TMouseButton Button,
//      TShiftState Shift, int X, int Y)
/*
  if (numev==0) { // если нажатий на кнопку «Далее» не производилось, то
    Desk->Canvas->Pen->Color=clBlack; // цвет=черный
    Desk->Canvas->Pen->Width=10; // толщина пера=10 пикселей
    Desk->Canvas->MoveTo(X,Y); // ставится точка
    Desk->Canvas->LineTo(X,Y);
    xy[0][kv]=X; // координаты вершины заносятся в массив
    xy[1][kv]=Y;
    Desk->Canvas->TextOutA(X+10, Y+10, AnsiString(kv=kv+1));
    // рядом выводится номер вершины
  }
  if (numev == 1) { // построение ребер
    for (int i=0; i<kv; i++) {
      if ((X>(xy[0][i]-5))&&(X<(xy[0][i]+5))) {
        if ((Y>(xy[1][i]-5))&&(Y<(xy[1][i]+5))) {
          if (select==false) { // если вершина отмечена первой
            Desk->Canvas->Pen->Color = clGray; // отметить ее серым цветом
            Desk->Canvas->Pen->Width = 7;
            Desk->Canvas->MoveTo(xy[0][i],xy[1][i]);
            Desk->Canvas->LineTo(xy[0][i],xy[1][i]);
            line=i; // занести в переменную номер вершины
            select = true; // поставить отметку, что одна вершина уже выделена
          }
          else { //иначе
            Desk->Canvas->Pen->Color = clBlack;
            Desk->Canvas->Pen->Width = 10;
            Desk->Canvas->MoveTo(xy[0][line],xy[1][line]);
            Desk->Canvas->LineTo(xy[0][line],xy[1][line]);
            Desk->Canvas->Pen->Width = 3;
            Desk->Canvas->LineTo(xy[0][i],xy[1][i]); // провести линию
            matrix[line][i] = 1; // поставить отметку о ребре в матрице смежности
            matrix[i][line] = 1;
            select = false; // ребро построено, выделенных вершин нет
          }
          break;
        }
      }
    }
  }
*/
}
//---------------------------------------------------------------------------
//Функция обработки события кнопки «Далее»
void __fastcall TF_Main::BNextClick(TObject *Sender)
{
  if (numev==0) { // если нажатие производится в первый раз
    matrix=new char* [kv]; // создать массив для матрицы смежности
    for (int i=0; i<kv; i++) { // обнулить этот массив
      matrix[i]=new char [kv];
      for (int j=0; j<kv; j++) {
        matrix[i][j]=0;
      }
    }
    Status->Caption="Статус:\n\n...отмечаем ребра..."; // сменить статус
  }
  if (numev==1) { // повторное нажатие на кнопку
    Status->Caption = "Статус:\n\n Готово!"; //смена статуса
    BNext->Enabled = false;
    ResCap->Caption = "Результаты:";
    Gamilton(); // вывов функции Gamilton
  }
  numev++; //увеличение счетчика событий на единицу
}
//---------------------------------------------------------------------------
//Функция обработки события кнопки «Очистить» - "очистка" канвы Image - заливка белым
void __fastcall TF_Main::BClearClick(TObject *Sender)
{
//  BNext->Enabled = true;
//  PatBlt(Desk->Canvas->Handle,
//         0,
//         0,
//         Desk->ClientWidth,
//         Desk->ClientHeight,
//         WHITENESS);
}
//---------------------------------------------------------------------------
// Приватные функции. Прототипы объявлены в заголовочном файле Main.h
//Функция поиска гамильтоновых циклов
void __fastcall TF_Main::Gamilton(void)
{
  buf=new int[kv]; // создание буфера
  buf[0] = 0;
  for (int i=0; i<kv; i++) { // обнуление буфера
    buf[i]=NULL;
  }
  F=fopen("Process.txt","wt"); //создание файла для записи
  Ways(0,1); //вызов функции для поиска новых вершин в цепи
}
//---------------------------------------------------------------------------
// Функция для поиска новых вершин в цепи
void __fastcall TF_Main::Ways(int ver, int num)
{
  select = false;
  if (mark == true) { // если вершины уже удалялись
    kvdel=buf[num]; //начинать отсчет вершин с
  }
  else kvdel = 0; // иначе обнулить этот счетчик
  mark = false;
  for (int i=kvdel; i<kv; i++) { // цикл поиска возможных вершин
    if (matrix[ver][i]==0) continue; // если нет ребра, следующий
    if (Repeat(i,num)) continue; // если вершина уже была, следующий
    if (i==buf[num]) continue;
    ver=i;
    select=true; // отметка, что вершину нашли
    break;
  }
  if (select==true) { // если вершина найдена
    buf[num]=ver; // добавить ее в цепь
    num++;  //увеличить счетчик
    Ways(ver, num); // рекурсивно вызвать с новыми параметрами
   }
  else { // если вершина не найдена
    if (num==kv) { // если длина цепи равна количеству вершин
      way=buf[0]+1;
      for (int i=1; i<kv; i++) {
        way += ',';
        way += buf[i]+1;
      }
      if (matrix[buf[kv-1]][0]!=0) way += ",1";
      Results->Items->Add(way); // вывод результата на экран
      way += '\n';
      fprintf(F,way.c_str()); //вывод в файл
    }
    way = buf[0]+1;
    for (int i=1; i<num; i++) {
      way += ',';
      way += buf[i]+1;
    }
    way += '\n';
    fprintf(F,way.c_str());   //вывод промежуточных результатов в файл
    num--;  //уменьшаем счетчик
    mark = false;
    if (num!=0) { //если счетчик вершины не равен 0
      if (num!=kv-1) buf[num+1]=NULL; // и не равен количеству вершин, то обнулить
                                      // следующую ячейку буфера
        mark=true;  //отметка о удалении вершины
        Ways(buf[num-1], num);  //поиск следующей вершины
      }
      else fclose(F); //все циклы найдены, закрыть файл
//    }
  }
}
//---------------------------------------------------------------------------
// Функция проверки на повторы вершин в цепи
int __fastcall TF_Main::Repeat(int i, int num)
{
  for (int j=0; j<num; j++) {   //цикл поиска такой же вершины
    if (buf[j]==i) return 1;    //если  такая найдена, то повтор есть
  }
//  }
  return 0;   //нет повтора
}
//---------------------------------------------------------------------------
Main.h
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
//---------------------------------------------------------------------------
 
#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TF_Main : public TForm
{
__published:  // IDE-managed Components
  TLabel *Status;
  TImage *Desk;
  TButton *BNext;
  TButton *BClear;
  TLabel *ResCap;
  TListBox *Results;
  void __fastcall DeskClick(TObject *Sender);
  void __fastcall BNextClick(TObject *Sender);
  void __fastcall BClearClick(TObject *Sender);
  void __fastcall DeskMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y);
private:  // User declarations
public:    // User declarations
  __fastcall TF_Main(TComponent* Owner);
  // свои функции
  void __fastcall Gamilton(void);
  void __fastcall Ways(int ver, int num);
  int __fastcall Repeat(int i, int num);
};
//---------------------------------------------------------------------------
extern PACKAGE TF_Main *F_Main;
//---------------------------------------------------------------------------
#endif
Архив с проектом в приложении, делался в RAD XE, в данном случае это значения не имеет.
Миниатюры
Графы (Гамильтонов цикл)  
Вложения
Тип файла: zip samalil.zip (605.2 Кб, 50 просмотров)
1
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 10
03.06.2013, 10:05  [ТС] 8
Не могу запустить..Кнопка запуска не активна

Добавлено через 1 час 16 минут
Кнопка запуска уже активна...Нажимаю запуск, компилирует...пропадают на 1 секунду окна "дерево" и "инспектор" и дальше ничего не происходит..... (как будто и не нажимал РАН)
0
LK
Заблокирован
03.06.2013, 11:14 9
Вы перенесли проект в Билдер6 - как (?) переносили, или каким-то образом запустили мой для ХЕ? Опишите более-менее в деталях последоватльность ваших действий. У меня все работает, пример тому - компилированный ЕХЕ в архиве.
0
Практикантроп
4741 / 2647 / 512
Регистрация: 23.09.2011
Сообщений: 5,678
03.06.2013, 11:57 10
samalil, у меня почему-то получилось в BCB 6 с тем, что любезно предоставил LK. Посмотрите в архиве
Вложения
Тип файла: rar 95.RAR (209.5 Кб, 64 просмотров)
1
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 10
03.06.2013, 13:30  [ТС] 11
ЕХЕ в Архиве у Вас, Ник, запустился без проблем и все идеально прост
А вот в Билдере компилит и выдает ошибку [Linker Fatal Error] Fatal: Unable to open file 'ACNTBCB6_R.LIB'
0
Практикантроп
4741 / 2647 / 512
Регистрация: 23.09.2011
Сообщений: 5,678
03.06.2013, 13:46 12
Цитата Сообщение от samalil Посмотреть сообщение
ЕХЕ в Архиве у Вас, Ник, запустился без проблем и все идеально прост
А вот в Билдере компилит и выдает ошибку [Linker Fatal Error] Fatal: Unable to open file 'ACNTBCB6_R.LIB'
это все "наследие проклятого прошлого"... Попробуйте заменить Project2.bpr вот этим...
Вложения
Тип файла: zip Project2.zip (3.5 Кб, 46 просмотров)
1
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 10
03.06.2013, 15:02  [ТС] 13
Все работает отлично! Правда кнопка "Сброс" не работает. Не могли бы Вы поправить маленькую неисправность?
0
LK
Заблокирован
03.06.2013, 15:11 14
samalil, неисправность - это нерабочая кнопка "Сброс", или какая другая?
0
0 / 0 / 0
Регистрация: 03.06.2013
Сообщений: 10
03.06.2013, 15:22  [ТС] 15
ну да..она самая
0
LK
Заблокирован
03.06.2013, 15:42 16
если не секрет, вы где код брали? может, там еще чего есть, типа кода внопки "Очитить"
0
LK
Заблокирован
03.06.2013, 16:32 17
очистить не сложно:
C++
1
2
3
4
5
6
7
8
9
//---------------------------------------------------------------------------
//Функция обработки события кнопки «Очистить» - "очистка" канвы Image - заливка белым
void __fastcall TF_Main::BClearClick(TObject *Sender)
{
//  BNext->Enabled = true;
  Desk->Canvas->Brush->Color = clWhite;
  Desk->Canvas->FillRect(Desk->Canvas->ClipRect);
}
//---------------------------------------------------------------------------
но только до нажатия кнопки "Далее", при этом счетчик вершин не сбрасывается на ноль. думайте
Миниатюры
Графы (Гамильтонов цикл)   Графы (Гамильтонов цикл)   Графы (Гамильтонов цикл)  

Графы (Гамильтонов цикл)  
0
LK
Заблокирован
03.06.2013, 16:35 18
аналогичная, но лучшая Программа Графы
1
Практикантроп
4741 / 2647 / 512
Регистрация: 23.09.2011
Сообщений: 5,678
03.06.2013, 16:55 19
Цитата Сообщение от samalil Посмотреть сообщение
Все работает отлично! Правда кнопка "Сброс" не работает. Не могли бы Вы поправить маленькую неисправность?
Если имеется в виду клавиша DClear , то возможно вот так устроит__
C++
1
2
3
4
5
6
7
8
9
10
11
12
void __fastcall TF_Main::BClearClick(TObject *Sender)
{
   BNext->Enabled = true;
   Results->Clear() ;
   numev = 0;  kv = 0;
// PatBlt(Desk->Canvas->Handle,0,0,Desk->ClientWidth,Desk->ClientHeight,WHITENESS);
   Status->Caption = "Ñòàòóñ:\n\n...îòìå÷àåì âåðøèíû...";
   TRect RE; RE.left = 0; RE.top = 0;
   RE.right = Desk->Width ; RE.bottom = Desk->Height ;
   Desk->Picture->Bitmap->Canvas->Brush->Color = clWhite;
   Desk->Picture->Bitmap->Canvas->FillRect(RE);
}
(очистка поля Desk у LK красивее сделана...)
0
LK
Заблокирован
03.06.2013, 16:58 20
Цитата Сообщение от LK Посмотреть сообщение
BClear
, а то уважаемый samalil выдвинет претензии в связи с отсутствием кнопки
Цитата Сообщение от nick42 Посмотреть сообщение
DClear
.

Не по теме:

давно никому здесь так не угождали, как уважаемому samalil.... с чего бы это :scratch: ?

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

Гамильтонов цикл
Накопилась пара вопросов: 1. Найти гамильтонов цикл графа, используя метод поиска с возвратом. Что...

Гамильтонов цикл
Вообщем если задать стартовую вершину 1,то выведет все циклы,при 2 выведет те же циклы,что и при...

Гамильтонов цикл в графе
Нужно написать функцию нахождения гамильтонова цикла в графе. Цикл ищется по матрице смежности...

Гамильтонов Цикл (из Delphi в C++)
Здравствуйте дорогие форумчане! Прошу прощение за беспокойство.Сразу к сути. Мне необходимо...


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

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

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