37.解数独_hard

本文介绍如何解决数独问题。题目要求编写程序,确保数独满足每行、每列和每个宫内的数字唯一性。数独输入保证有唯一解,且已部分填充。分析部分提到解题思路,解答部分将详细阐述算法过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

37. 解数独

难度困难445收藏分享切换为英文关注反馈

编写一个程序,通过已填充的空格来解决数独问题。

一个数独的解法需遵循如下规则

  1. 数字 1-9 在每一行只能出现一次。
  2. 数字 1-9 在每一列只能出现一次。
  3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

空白格用 '.' 表示。

一个数独。

答案被标成红色。

来源:力扣(LeetCode)37.解数独
链接:https://leetcode-cn.com/problems/sudoku-solver/

Note:

  • 给定的数独序列只包含数字 1-9 和字符 '.' 。
  • 你可以假设给定的数独只有唯一解。
  • 给定数独永远是 9x9 形式的。

分析</

% 参数设置 EsN0_dB = 0:2:12; % Es/N0范围,根据需要调整到BER 1e-4 numSymbols = 1e6; % 每个Es/N0点发送的符号数 numBits = 2 * numSymbols; % 总比特数 grayMapping = [1+1j, 1-1j, -1-1j, -1+1j]/sqrt(2); % 正确格雷顺序:00→(1,1), 01→(1,-1), 11→(-1,-1), 10→(-1,1) ber_hard = zeros(size(EsN0_dB)); ber_soft = zeros(size(EsN0_dB)); theoretical_ber = zeros(size(EsN0_dB)); % 遍历每个Es/N0点 for idx = 1:length(EsN0_dB) % 当前Es/N0 EsN0_lin = 10^(EsN0_dB(idx)/10); N0 = 1 / EsN0_lin; % 因为Es=1 noiseVar = N0/2; % 每个实虚部分的噪声方差 % 生成随机比特 bits = randi([0 1], numBits, 1); % 调制 symbols = zeros(numSymbols, 1); for i = 1:numSymbols b0 = bits(2*i-1); b1 = bits(2*i); % 根据格雷映射选择符号 if b0 ==0 && b1 ==0 symbols(i) = grayMapping(1); elseif b0 ==0 && b1 ==1 symbols(i) = grayMapping(2); elseif b0 ==1 && b1 ==1 symbols(i) = grayMapping(3); else symbols(i) = grayMapping(4); end end % 添加噪声 noise = sqrt(noiseVar) * (randn(size(symbols)) + 1i*randn(size(symbols))); received = symbols + noise; % 硬判决解调 decoded_hard = zeros(numBits, 1); for i = 1:numSymbols y = received(i); % 判断实部和虚部的符号 b0 = real(y) < 0; % 实部<0则为1 b1 = imag(y) < 0; % 虚部<0则为1 decoded_hard(2*i-1) = b0; decoded_hard(2*i) = b1; end errors_hard = sum(bits ~= decoded_hard); ber_hard(idx) = errors_hard / numBits; % 软判决解调(LLR) decoded_soft = zeros(numBits, 1); for i = 1:numSymbols y = received(i); % 计算LLR LLR_b0 = 2*sqrt(2)*EsN0_lin * real(y); LLR_b1 = 2*sqrt(2)*EsN0_lin * imag(y); decoded_soft(2*i-1) = (LLR_b0 < 0); decoded_soft(2*i) = (LLR_b1 < 0); end errors_soft = sum(bits ~= decoded_soft); ber_soft(idx) = errors_soft / numBits; % 理论BER theoretical_ber(idx) = qfunc(sqrt(2*EsN0_lin)); % 添加系数2 end % 绘图 semilogy(EsN0_dB, ber_hard, &#39;ro-&#39;, EsN0_dB, ber_soft, &#39;b*-&#39;, EsN0_dB, theoretical_ber, &#39;k--&#39;); grid on; xlabel(&#39;Es/N0 (dB)&#39;); ylabel(&#39;BER&#39;); legend(&#39;Hard Decision&#39;, &#39;Soft Decision&#39;, &#39;Theoretical&#39;); title(&#39;QPSK BER Performance with Gray Mapping&#39;); 上述代码是用matlab画出格雷映射QPSK在不同Es_N0下的BER仿真结果图的代码 请参照此代码的步骤与公式,用matlab画出格雷映射16QAM在不同Es_N0下的BER仿真结果图的代码,要求BER到1e-4量级 图上画2条曲线,分别是硬判决和软判决的BER结果
最新发布
03-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值