Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2006, 18:49   #1
Уловка
Новичок
Джуниор
 
Аватар для Уловка
 
Регистрация: 17.11.2006
Сообщений: 2
По умолчанию Help!!!

Здраствуйте, программисты! У меня случилась беда и я не знаю к кому больше обратиться.... у меня курсовик( По Delphi.
Знаю, знаю - среда программирования дружественная, язык более или менее простой, но всякие мелочи жизни прекрасной мешают...
Итак: задание на курсовик...
Дано шахматное поле nXn расставить n ферзей так чтобы они не били друг друга...
Логику я понимаю но сделать...ни знаний ни сноровки не хватает...
Помогите кто чем сможет...там советом, кодом...
Точно всем отвечу ... спасибом!
Уловка вне форума Ответить с цитированием
Старый 17.11.2006, 19:04   #2
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

а эта задача точно решается?
например поле 2х2, 3х3 - на них точно не получится расставить 2 и 3 ферзя соответственно, чтоб они не били друг друга (т.е. чтоб ни по горизонтали, ни по вертикали, ни по диагонали от ферзя не было других ферзей).
zetrix вне форума Ответить с цитированием
Старый 17.11.2006, 19:11   #3
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
Счастье

получите, леди :
(я сегодня добрый)
Код:
{задача ферзи}
program Eight_Gueens;
Uses Crt;
Const max = 7;
      m = 2*max;
Type vector=array[0..max] of word;
Var sol:vector;
    grow:array[0..max] of boolean;
    updiag:array[-max..max] of boolean;
    downd:array[0..m] of boolean;
    done :boolean;
    row,col,diag :integer;
    tot,count :word;
    outf:file of vector;

Procedure remove;
Begin
     grow[row]:=false;
     downd[col+row]:=false;
     updiag[col-row]:=false;
End;

Procedure backtrack;
Begin
     If Keypressed then halt;
     Dec(col);
     row:=sol[col];
     while (row=max)and(col>0) do
     begin
          remove;
          dec(col);
          row:=sol[col];
     end;
     If row<max then
     begin
          remove;
          inc(row);
     end
     else done:=true;
End;

Procedure Print;
Begin
     Write('Решение ',count:2,': ');
     Write('[');
     For col:=0 to max do
         write(sol[col]:3);
     Writeln(']':3);
     delay(1000);
    
     Write(outf,sol);
End;


Begin
     Assign(outf,'qs.dat');
     Rewrite(outf);
     ClrScr;
     Tot:=0;
     Count:=0;
     Writeln('Все решения задачи о ',max+1,' ферзях');
     Writeln;

     Done:=False;
     For row:=0 to max do grow[row]:=false;
     For diag:=-max to max do updiag[diag]:=false;
     For diag:= 0 to m do downd[diag]:=false;
     row:=0;
     col:=0;

     Repeat
           If grow[row] or downd[col+row] or updiag[col-row]
           then
              if row=max then
                             backtrack
                         else
                             inc(row)
           else
               begin
                    Sol[col]:=row;
                    grow[row]:=true;
                    downd[col+row]:=true;
                    updiag[col-row]:=true;
                    If col=max then
                    begin
                         inc(tot);
                         inc(count);
                         Print;
                         Remove;
                         BackTrack;
                    end
                       else
                    begin
                         inc(col);
                         row:=0;
                    end;
               end;
     Until done;

     Writeln;
     Writeln('Число решений: ',tot);
     Writeln;
     Write('Нажмите <Enter>: ');
     Readln;
     Close(outf);
End.
Берегите друг друга!

Последний раз редактировалось Virtson; 17.11.2006 в 19:22.
Virtson вне форума Ответить с цитированием
Старый 17.11.2006, 19:14   #4
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
Хорошо модуль для отображения решения

пример с книги Немнюгина 'Turbo Pascal'
Вложения
Тип файла: rar ferzi_.rar (1.9 Кб, 14 просмотров)
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 19.11.2006, 18:39   #5
Уловка
Новичок
Джуниор
 
Аватар для Уловка
 
Регистрация: 17.11.2006
Сообщений: 2
Счастье

о! огромное спасибо! то что на паскале - фигня, переработаю...
я рада что вы откликнулись на мою просьбу. ещё раз спасибо
Уловка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск