Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
- type
- { TForm1 }
- TForm1 = class(TForm)
- Memo1 : TMemo;
- private
- { private declarations }
- public
- { public declarations }
- end;
- var
- Form1 : TForm1;
- implementation
- {$R *.lfm}
- const
- A = 3;
- B = 3;
- N = 7;
- var
- Checkboard : array [1..A] of array [1..B] of Integer;
- Visited: array [1..A] of array [1..B] of Boolean;
- X, Y, Sum, Count : Integer;
- function IsNeighbour(X1, Y1, X2, Y2 : Integer) : Boolean;
- begin
- Result := False;
- // valid index
- if (X2 >= 1) and (X2 <= A) and (Y2 >= 1) and (Y2 <= B) then
- begin
- // to left
- if (X1 - X2 = -1) and (Y1 = Y2) then
- Result := True
- // to right
- else if (X1 - X2 = 1) and (Y1 = Y2) then
- Result := True
- // to down
- else if (X1 = X2) and (Y1 - Y2 = -1) then
- Result := True
- // to up
- else if (X1 = X2) and (Y1 - Y2 = 1) then
- Result := True;
- end;
- end;
- procedure Backtracking(X1, Y1, X2, Y2 : Integer);
- var
- X, Y : Integer;
- begin
- Visited[X1][Y1] := True;
- if (X1 = X2) and (Y1 = Y2) then
- begin
- if Sum = N then
- begin
- Inc(Count);
- end;
- end
- else
- for X := Low(Checkboard) to High(Checkboard) do
- for Y := Low(Checkboard[X]) to High(Checkboard[X]) do
- if (Visited[X][Y] = False) and IsNeighbour(X1,Y1,X,Y) then
- begin
- Form1.Memo1.Append('[' + IntToStr(X) + ',' + IntToStr(Y) + ']');
- Inc(Sum, Checkboard[X][Y]);
- // Sleep(100);
- if Sum <= N then
- Backtracking(X, Y, X2, Y2);
- Dec(Sum, Checkboard[X][Y]);
- end;
- Visited[X1][Y1] := False;
- end;
- begin
- Sum := 0;
- Count := 0;
- // Fill arrays
- for X := Low(Checkboard) to High(Checkboard) do
- for Y := Low(Checkboard[X]) to High(Checkboard[X]) do
- Checkboard[X][Y] := Random(N div 2);
- for X := Low(Visited) to High(Visited) do
- for Y := Low(Visited[X]) to High(Visited[X]) do
- Visited[X][Y] := False;
- // Start backtrack
- Backtracking(1, 1, A, B);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement