вот я написал пограммку.
вроде работает, нО(!):
чтение не из файла(не умею), и напиано при помощи рекурсии(только это и умею), ну и короче посмотри, может алгоритм поможет чем-нибудь...
Код
Program Dice;
uses crt;
type
line=array[1..300] of shortint;
matrix=array[1..6] of shortint;
var
NN,MM,limit,k:integer;
mass:matrix;
lin:line;
procedure dices(masss:matrix;direct:char;n,m,turn:integer;way:line);
begin
if (n>NN) or (m>MM) or (turn>=limit) then exit
else
if n+m=NN+MM then begin
writeln('gotcha');
limit:=turn; {на данный момент наименьшая сумма верхних граней}
writeln(turn);
for k:=1 to n+m do
write(way[k],' ');
readln;
exit
end;
if direct='r' then {так кубик вращается вправо}
begin
k:=masss[5];
masss[5]:=masss[4];
masss[4]:=masss[3];
masss[3]:=masss[2];
masss[2]:=k;
n:=n+1 {позиция кубика по горизонтали}
end
else
if direct='u' then {так кубик вращается вверх}
begin
k:=masss[6];
masss[6]:=masss[2];
masss[2]:=masss[1];
masss[1]:=masss[4];
masss[4]:=k;
m:=m+1 {позиция кубика по вертикали}
end;
way[n+m]:=masss[2]; {промежуточный путь кубика в виде массива значений верхних граней}
dices(masss,'u',n,m,turn+masss[2],way);
dices(masss,'r',n,m,turn+masss[2],way);
end;
BEGIN
clrscr;
writeln('ўўҐ¤ЁвҐ N');
readln(NN);
writeln('ўўҐ¤ЁвҐ M');
readln(MM);
limit:=(NN+MM)*5; {типа первый предел суммы, от фоная}
for k:=1 to 200 do
lin[k]:=0; {массив ходов}
writeln('ўўҐ¤ЁвҐ front');
readln(mass[1]); {это сам кубик}
writeln('ўўҐ¤ЁвҐ up');
readln(mass[2]); {это сам кубик}
writeln('ўўҐ¤ЁвҐ right');
readln(mass[3]); {это сам кубик}
mass[4]:=7-mass[2]; {это сам кубик}
mass[5]:=7-mass[3]; {это сам кубик}
mass[6]:=7-mass[1]; {это сам кубик}
dices(mass,'0',0,0,0,lin);
writeln('Done!');
readln
END
.
очень буду рад предложения по поводу того, как реализовать мою программу(если такое возможно) с требуемыми условиями задачи...
спасибо.