matlab生成数独,数独的MATLAB程序

function [aa,flag] = nine_cal(a,m,n,data)

flag_err = 0;

[m1,n1] = size(a);

if (m1 ~= 9) & (n1~=9)

flag_err = 1;

end

a1 = a;

a1(m,n) = data;

%a1(1,1) = 4;

%heng same

for i = 1:9

for j = 1:8

for k = (j+1):9

if (a1(i,j) == a1(i,k)) & (a1(i,j) ~= 0)

flag_err = 1;

break;

end

end

if flag_err == 1

break;

end

end

if flag_err == 1

break;

end

end

%shu same

for i = 1:9

for j = 1:8

for k = (j+1):9

if (a1(j,i) == a1(k,i)) & (a1(j,i) ~= 0)

flag_err = 1;

break;

end

end

if flag_err == 1

break;

end

end

if flag_err == 1

break;

end

end

%nine same

m1 = 1;

n1 = 1;

for i = 1:3

for j = 1:3

n1 = 1;

for k = 0:2

for l = 0:2

a2(m1,n1) = a1(i*3-k,j*3-l);

n1 = n1 + 1;

end

end

for k = 1:8

for l = (k+1):9

if (a2(m1,k) == a2(m1,l)) & (a2(m1,k) ~= 0)

flag_err = 1;

break;

end

end

if flag_err == 1

break;

end

end

m1 = m1 + 1;

if flag_err == 1

break;

end

end

if flag_err == 1

break;

end

end

%flag_err = 0;

for i = 1:9

if flag_err == 1

break;

end

for j = 1:9

if flag_err == 1

break;

end

if a1(i,j) == 0

%heng cal

a3 = zeros(1,9);

for k = 1:9

for l = 1:9

if k == a1(i,l)

a3(k) = k;

end

end

end

%num_a3 = num_a3 - 1;

%shu cal

for k = 1:9

for l = 1:9

if k == a1(l,j)

a3(k) = k;

end

end

end

%nine cal

for k = 1:9

for l = 1:9

if k == a2((ceil(j/3)+(ceil(i/3)-1)*3),l)

a3(k) = k;

end

end

end

%

l = 0;

for k = 1:9

if a3(k) == 0

l = 1;

[a1,flag_err] = nine_cal(a1,i,j,k);

if flag_err == 0

break;

end

end

end

if l == 0

flag_err = 1;

break;

end

end

end

end

if flag_err == 1

flag = 1;

aa = a;

elseif flag_err == 0

flag = 0;

aa = a1;

end

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中设计数游戏,你可以利用其强大的数值计算和逻辑处理能力。以下是一个简单的步骤概述: 1. 定义数的9x9网格结构:首先,创建一个9x9的矩阵,初始值设为0,表示未填充的格子。 ```matlab grid = zeros(9); ``` 2. 创建函数来生成随机数谜题:你可以使用递归回溯法(Backtracking)生成一个合法的数解。这个过程包括随机选择一个空格,尝试填入一个数字,检查是否违反数规则(每个数字在同一行、列和宫(3x3的小格)内只出现一次),如果不违反,则继续下一个空格,如果违反则回溯到上一步尝试其他数字。 ```matlab function [grid, solution] = generate_sudoku() % 初始化 grid = zeros(9); solution = zeros(9, 9); % 解的保存位置 % 递归填充数 fill_sudoku(1:9, 1:9, grid, solution); end function fill_sudoku(row, col, grid, solution) % 检查是否已填满 if row == 10 return; % 生成完成,返回解 end % 选择下一个空格 while grid(row, col) ~= 0 col = mod(col, 9) + 1; % 循环列 if col == 10 row = row + 1; col = 1; end end % 遍历1-9的数字 for num = 1:9 if is_valid(grid, row, col, num) grid(row, col) = num; solution(row, col) = num; % 继续填充下一行或列 fill_sudoku(row + 1, col, grid, solution); if ~isempty(find(grid == num, [], 'rows')) || ... % 检查行是否已存在该数字 ~isempty(find(grid == num, [], 'cols')) || ... % 检查列是否已存在该数字 ~isempty(find(grid == num, 1:3:end, 1:3:end)) || ... % 检查宫格是否已存在该数字 fill_sudoku(row, col + 1, grid, solution); % 否则,尝试下一个单元格 else grid(row, col) = 0; % 回溯 end end end end function is_valid(grid, row, col, num) % 检查行、列和宫格 check_rows = find(grid(row, :) == num); check_cols = find(grid(:, col) == num); check_box = find(grid(row:row+2:end, col:col+2:end) == num); return isempty(check_rows) && isempty(check_cols) && isempty(check_box); end ``` 3. 生成并显示数:调用`generate_sudoku`函数生成谜题,然后显示它。 ```matlab [grid, solution] = generate_sudoku(); disp(grid); % 显示谜题 ``` 4. 提供解决方案或用户输入验证:如果你想展示解决方案,可以直接查看`solution`矩阵。如果你想要用户解决数,可以在显示谜题后提示用户输入答案并进行验证。 ```matlab disp('请输入你的解:'); user_solution = input('Enter the 9x9 grid: '); % 验证用户解 if all(grid == user_solution) disp('恭喜,你解对了!'); else disp('解错误,请重新尝试!'); end ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值