Sudoku---hdu2676(数独DFS)
2024-08-25 09:02:39
http://poj.org/problem?id=2676
递归深搜
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#include<math.h>
#include<iostream> using namespace std; #define N 100
#define INF 0xffffffff
#define memset(a,b) memset(a,b,sizeof(a)) int a[][]; struct node
{
int x,y;
} e[N];
int sum; int v1[N][N],v2[N][N],v3[N][N], ok; void DFS(int p)
{ if(p>sum)
{
ok=;
return;
} for(int i=; i<=; i++)
{
if(!ok)
if(v1[e[p].x][i]== && v2[e[p].y][i]== && v3[(e[p].x/)*+e[p].y/][i]==)
{
a[e[p].x][e[p].y]=i;
v1[e[p].x][i]=;
v2[e[p].y][i]=;
v3[(e[p].x/)*+e[p].y/][i]=; DFS(p+); // a[e[p].x][e[p].y]=0;
v1[e[p].x][i]=;
v2[e[p].y][i]=;
v3[(e[p].x/)*+e[p].y/][i]=;
}
}
} int main()
{
int T;
scanf("%d ",&T);
while(T--)
{
memset(v1,);
memset(v2,);
memset(v3,);
ok=sum=;
char str[N];
for(int i=; i<; i++)
{
scanf("%s",str);
for(int j=; j<; j++)
{
a[i][j]=str[j]-'';
if(a[i][j]!=)
{
v1[i][a[i][j]]=;
v2[j][a[i][j]]=;
v3[(i/)*+j/][a[i][j]]=;
}
else
{
sum++;
e[sum].x=i;
e[sum].y=j;
}
}
}
DFS();
for(int i=; i<; i++)
{
for(int j=; j<; j++)
{
printf("%d",a[i][j]);
}
printf("\n");
} }
return ;
}
最新文章
- Oracle学习总结_day01_day02_表的创建_增删改查_约束
- 定位frame 中的对象
- Container Stack
- sublime Text 3 Package Control 安装代码
- Python自动化运维之19、Paramiko模块和堡垒机实战
- INSERT command denied to user
- Qt编程之QtScript
- iOS开发网络篇之文件下载、大文件下载、断点下载
- 原生js实现简单的全屏滚动
- 手机web——自适应网页设计(html/css控制)【转】
- sql查询重复值
- python之集合set
- java springboot2 jquery 抽奖项目源码
- weblogic系列漏洞整理 -- 1. weblogic安装
- BZOJ.2177.曼哈顿最小生成树(Kruskal)
- PAT 1087 有多少不同的值(20)(STL—set)
- .net4.0 请求HTTPS出错:未能创建 SSL/TLS 安全通道
- [框架模式]经典的模型视图控制器模式MVC
- 雷林鹏分享:Ruby 类案例
- lnmp环境一键搭建及卸载