hdu4069 Squiggly Sudoku

这是一篇关于使用DLX算法解决不规则9x9数独问题的博客。数独的每个小区域不再是正方形,而是形状不规则且面积为9的图形。通过位运算和深度优先搜索(DLS)来处理边界条件,并在找到第一个解后保存,以避免后续搜索破坏已找到的解。若找到第二个解,则表明存在多解。
摘要由CSDN通过智能技术生成

        解一个9*9的数独,行和列和普通数独一样需要出现1~9,但是它的小区域不是方形的,而是一个不规则的面积为9的图形。

        DLX模版题。位运算和dfs处理小区域的边界就不说了。DLX搜解,搜到一个解以后继续搜,如果搜到第二个解则说明有多解,立即跳出。需要注意的是,搜到第一个解以后,需要保存解,不然继续搜索原来的解会被破坏。


#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;   
  
#define ll long long  

const int SLOT = 0;
const int ROW = 1;
const int COL = 2;
const int SUB = 3;

int encode(int type,int id,int num){
    return type*81+(id-1)*9+num;
}

int mp[12][12];
int sub[12][12];

const int maxnode=270000;
const int maxn=350;
const int maxr=750;

int anscnt;
void init(){
    anscnt=0;
    memset(sub,0,sizeof(sub));
}

struct dlx{
	#define FOR(i,A,s) for(i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值