Мини-судоку Решите рекурсивно мини-судоку размером 4x4. Для этого напишите функцию solve_sudoku(matrix), где matrix - целочисленная матрица (список списков).
В мини-судоку числа от 1 до 4 встречаются ровно один раз в каждой вертикали и горизонтали, а также в квадратах 2x2.
Подумайте, как можно использовать функцию решения судоку для генерации корректно заполненных полей. Это бывает нужно, например, для обратной задачи – генерации судоку.
Формат ввода Со стандартного потока ввода для решения выдается Судоку, представленный в виде таблицы чисел, в которой нулями обозначены пустые места:
Const m=8; n=6; var a:array[1..m,1..n] of integer; st,t:string; i,j,k,s:integer; begin Write('k='); Read(k); Randomize; Writeln('Исходная матрица A[',m,',',n,']'); st:=''; for i:=1 to m do begin s:=0; for j:=1 to n do begin a[i,j]:=Random(15)-5; // [-5;9] Write(a[i,j]:3); s:=s+a[i,j] end; Writeln; if s>k then begin Str(i,t); if st='' then st:=t else st:=st+','+t end end; if st<>'' then Writeln('Искомые строки: ',st) end.
a:array[1..n] of integer; //создали одномерный массив длинной 5 b:array[1..n,1..n] of integer; //создали двумерный массив 5х5 i,j:integer; //i,j- счетчик
begin
for i:=1 to n do for j:=1 to n do b[i,j]:=random(10)+1; {задали массив случайными числами в диапазоне от 1 до 10}
for i:=1 to n do begin a[i]:=b[i,i]; //присваиваем i-ому элементу массива элемент i-i. end; //То есть 1-ому, 1-1, 2-ому 2-2. Это и есть главная диагональ.
{вывод двумерного массива на всякий случай: for i:=1 to n do begin for j:=1 to n do begin write(b[i,j],' '); end; writeln(""); end; }
For i:=1 to n do write(a[i]," ");
readln(); end.
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку