function Y = SudokuShort(X) disp(' ') disp('{======================================================}') disp('{=================== Sudokulöser ======================}') disp('{======================================================}') disp(' ') disp('Bitte Matrix eingeben, für leere Felder 0 eintragen, Beispiel im Quelltext!') %Zelle = input ('Bitte Feld eingeben: '); Zelle = X(:)'; %Zelle = [0 2 4 3 9 6 8 5 7 0 0 0 0 0 0 0 0 2 6 8 0 0 2 5 9 3 4 3 0 0 9 1 2 0 0 5 2 4 8 0 0 0 3 9 1 5 0 0 8 4 3 0 0 6 7 3 5 4 6 0 0 1 8 4 0 0 0 0 0 0 0 0 8 9 2 5 7 1 6 4 0]; reihenzellen = cell(81,8); spaltenzellen = cell(81,8); hauptzellen = cell(81,8); for reihe = 1:9 for spalte = 1:9 position = (reihe-1) * 9 + spalte; i = 1; for s = 1:9 if (s ~= spalte) reihenzellen{position,i} = (reihe-1) * 9 + (s-1)+1; i = i+1; end end i = 1; for r = 1:9 if (r ~= reihe) spaltenzellen{position,i} = 9 * (r-1) + spalte; i = i+1; end end hauptreihe = floor((reihe-1) / 3); hauptspalte = floor((spalte-1) / 3); i = 1; for hr = 0:2 for hs = 0:2 index = (((hauptreihe * 3) + hr) * 9) + (hauptspalte * 3) + hs+1; if (index ~= position) hauptzellen{position,i} = index; i = i+1; end end end end end for position = 1:81 if Zelle(position) ~= 0 if (~teste(position, Zelle(position), reihenzellen, spaltenzellen, hauptzellen, Zelle)) disp('Das Sudoku konnte nicht gelöst werden, weil es Fehler enthält!!'); return; end end end disp('{===================== Rätsel =======================}') Aufgabe = [Zelle(1:9);Zelle(10:18);Zelle(19:27);Zelle(28:36);Zelle(37:45);Zelle(46:54);Zelle(55:63);Zelle(64:72);Zelle(73:81)]; Aufgabe Y=loese(1, Zelle, reihenzellen, spaltenzellen, hauptzellen); end function s = loese(position, Zelle, reihenzellen, spaltenzellen, hauptzellen) s = false; if position > 81 disp('{===================== Lösung =======================}') Loesung = [Zelle(1:9);Zelle(10:18);Zelle(19:27);Zelle(28:36);Zelle(37:45);Zelle(46:54);Zelle(55:63);Zelle(64:72);Zelle(73:81)]; Loesung s = true; return; end if (Zelle(position) == 0) for i = 1:9 if (teste(position, i, reihenzellen, spaltenzellen, hauptzellen, Zelle)) Zelle(position) = i; if (loese(position + 1 ,Zelle, reihenzellen, spaltenzellen, hauptzellen)) s = true; return; else Zelle(position) = 0; end end end s = false; else loese(position + 1,Zelle, reihenzellen, spaltenzellen, hauptzellen); return; end end function y = teste(position, value, reihenzellen, spaltenzellen, hauptzellen, Zelle) for i = 1:8 if (Zelle(reihenzellen{position,i}) == value) y = false; return; end if (Zelle(spaltenzellen{position,i}) == value) y = false; return; end if (Zelle(hauptzellen{position,i}) == value) y = false; return; end end y = true; end