深度优先搜索,以T581492 四阶数独为例

这里讨论的是一种简化后的数独-四阶数独。给出一个 4×4 的格子,每个格子只能填写 1 到 4 之间的整数,要求每行每列和四等分更小的正方形部分刚好都由1到4组成,每行每列,每小块不能有重复的数字出现,共有多少种方案?
先上代码:

  if(x > 16)
  	ans ++;
  int r=(x-1)/4+1;//填入数字所在的行
  int c=(x-1)%4+1;//填入数字所在的列
  int b=(r-1)/2*2+(c-1)/2+1;//填入数字所在的小方块
  for(int i = 1;i <= 4;i++){
  	if(row[r][i] == 0 && col[c][i] == 0 && block[b][i] == 0){
  		row[r][i] = col[c][i] = block[b][i] = 1;
  		a[i] = x;
  		dfs(x + 1);
  		·
  		
  	}
  		
  }
} ```
大概思路就是沿着一个答案一直往下填写下去,
如果后续可行,那么就通过`if(x > 16)`作为一个搜索出口避免执行`row[r][i] = col[c][i] = block[b][i] = 0;`;
如果不行那么又会归零并向上一步反馈(回溯),可以通过树状图理解:
(1,1)= 1 ——> (1,2) = 2 ——>……——>(4,4) = 4|——>(此时x > 16,方案数加一)
                                  (4,4) = 4|——>(回溯)
                                           |
posted @ 2026-07-25 14:46  黄昏逃避行  阅读(0)  评论(0)    收藏  举报