algorytm.org

Implementacja w Delphi/Pascal



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Problem skoczka (konika) szachowego - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 4
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 25 sierpnia 2008 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

konik - Delphi/Konik.dpr:
//Problem konika (skoczka) szachowego
//www.algorytm.org
//Adam Mika, Tomasz Lubinski (c) 2008

//Algorytm podaje pierwsze dopuszczalne rozwiązanie problemu dla podanego punktu startowego
//pod warunkiem, że takie rozwiązanie istnieje.

program Konik;
{$APPTYPE CONSOLE}
uses
  SysUtils;

const max = 8;	//rozmiar problemu - wymiar szachownicy

type ArrayOfArray = Array[0..max-1] of Array[0..max-1] of Byte;

function ruch(var tab: ArrayOfArray; N: Integer; wariant: Integer; x: Integer; y: Integer;
 var nx: Integer; var ny: Integer): boolean;
begin
    case (wariant) of
        1:
        begin
           nx := x+1;
           ny := y-2;
        end;
        2:
        begin
           nx := x+2;
           ny := y-1;
        end;
        3:
        begin
           nx := x+2;
           ny := y+1;
        end;
        4:
        begin
           nx := x+1;
           ny := y+2;
        end;
        5:
        begin
           nx := x-1;
           ny := y+2;
        end;
        6:
        begin
           nx := x-2;
           ny := y+1;
        end;
        7:
        begin
           nx := x-2;
           ny := y-1;
        end;
        8:
        begin
           nx := x-1;
           ny := y-2;
        end;
    end;

    if ((0<=nx) and (nx<N) and (0<=ny) and (ny<N) and (tab[nx][ny]=0)) then
       Result := true
    else
       Result := false;
    
end;

function skoczek(var tab: ArrayOfArray; n: Integer; x: Integer; y: Integer; ktory: Integer): boolean;
var
           nx, ny, w: Integer;
begin

	   nx := 0;
	   ny := 0;
	   tab[x,y] := ktory;

	   if (ktory = n*n) then
              begin
	         Result := true;
                 exit;
              end
	   else
              begin
                  for w:=1 to 8 do
	           if(ruch(tab, n, w, x, y, nx, ny) = true) then
	             if (skoczek(tab, n, nx, ny, ktory+1) = true) then
                     begin
	                  Result := true;
                          exit;
                     end;
   	         tab[x,y] := 0;
  	      end;
	   Result := false;
end;



var
tab: ArrayOfArray;
i, j: Integer;
begin


		   for i:=0 to max-1 do
		      for j:=0 to max-1 do
		         tab[i,j] := 0;

		   if (skoczek(tab, max, 0, 0, 1) = true) then
		   begin
		   	for i:=0 to max-1 do
                        begin
        	   		for j:=0 to max-1 do
		   			write(IntToStr(tab[j,i]) + ' ');
		   		writeln;
                        end;
		   end;

                   readln;
end.
Dodaj komentarz