![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перебор
Gydvin © (2006-01-31 11:18:00)Привет all тут проблема возникла с перебором. вот код
procedure TForm1.Button1Click(Sender: TObject);
var
list,list1,list2:tstringlist;
a,t,x,y:integer;
r:array of string;
s,s1:string;
label ik;
begin
a:=5;
setlength(r,a+2);
list:=tstringlist.Create;
list1:=tstringlist.Create;
list2:=tstringlist.Create;
//list.LoadFromFile('file.txt'); ///текстовый файл с нобором строк
x:=0;
while x<a do begin
inc(a);
ik:
///// s:=der(x); здесь мы получаем маску слова
s:='п?ляна';///например вот эту маску;
list1.Clear;
list2.Clear;
t:=length(s);
//здесь получаем список строк подходящих по длине к маске (s)
for y:=0 to list.Count-1 do begin
s1:=list.Strings[y];
if length(s1)=t then list1.Add(s1);
end;
list2.Text:=r[x]; //// сюда грузим слова уже раннее проверенные
////здесь удаляем из списка ранее проверенные
for y:=0 to list2.Count-1 do begin
s1:=list2.Strings[y];
t:=list1.IndexOf(s1);
if t>-1 then list1.Delete(t);
end;
list1.Clear;
////здесь получаем слова подходящие по маске
for y:=0 to list1.Count-1 do begin
s1:=list1.Strings[y];
for t:=1 to length(s1) do if s[t]='?' then s1[t]:='?';
if s1=s then list2.Add(list1.Strings[y]);
end;
/// здесь выбираем слово из списка
randomize;
s:=list2.Strings[(list2.Count)];
// если слова не оказалось, тоесть нет вариантов
if s='' then begin
r[x]:=''; ///, мы возвращаемся на шаг назад
dec(x);
if (x<1)or(x=1) then begin
showmessage('Были прверены все варианты');
exit;
//здесь выходим если больше назад вернутся неможем
end;
goto ik;
end;
///здесь есль слово все же есть мы проделываем с ним определенные
//действия
/// и скидываем его в использованные
r[x]:=r[x]+s+#13#10; ///сохранение проверенного слова
end;
А вот, что конкретно не устраивает, по мере наполнения r[x], алгоритм начинает тормозить, да и плоско как то (r[x]:=r[x]+s+#13#10) это выглядит. И вобще алгоритм медленный, короче одним словом плоский, может кто знает как сделать это лучше или какие предложения будут, я непротив, а то уже голову сломал, а путевого ничего придумать не могу.
Gydvin (2006-01-31 11:23:00) [21]Ой, опечатка
list1.Clear;
////здесь получаем слова подходящие по маске
надо
list2.Clear;
////здесь получаем слова подходящие по маске