Выведите количество вариантов расстановки ладьи на шахматной доске, чтобы ни одна из них не угрожала другой
Категория: Delphi/Pascal
2016-04-17 11:29:32
Выведите количество вариантов расстановки ладьи на шахматной доске, чтобы ни одна из них не угрожала другой. Размер доски NxN (n вводится пользователем). Предусмотрите возможность вывода и самих вариантов расстановки.
code: #pascal
uses crt; var a:array[1..20,1..20] of byte; dx,dy:array[1..20] of boolean; j,l,n:integer; m:real; function work(x,y:byte):boolean; begin work:=(dx[x])and(dy[y]); end; procedure hod(x,y:byte); begin a[x,y]:=1;dx[x]:=false;dy[y]:=false; end; procedure back(x,y:byte); begin a[x,y]:=0;dx[x]:=true;dy[y]:=true; end; procedure solve(x,y:byte); var i:byte; begin if y>n then begin m:=m+1; exit; end; for x:=x to n do for i:=1 to n do if (a[x,i]=0)and(work(x,i)) then begin hod(x,i); solve(x+1,y+1); back(x,i); end; end; begin clrscr; write('Введите n='); readln(n); fillchar(dx,sizeof(dx),true); fillchar(dy,sizeof(dy ),true); solve(1,1); write('Количество расстановок=',m:0:0); readln end.
автор: Puporev
Поделиться: