博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2676/2918 数独(dfs)
阅读量:6069 次
发布时间:2019-06-20

本文共 1583 字,大约阅读时间需要 5 分钟。

思路:记录每行每列每一个宫已经出现的数字就可以。数据比較弱

另外POJ 3074 3076 必须用剪枝策略。但实现较麻烦,还是以后学了DLX再来做吧

//Accepted	160K	0MS	#include
#include
#include
#include
using namespace std;const int N =15;char sudo[N][N];bool visr[N][N],visc[N][N],visg[N][N];int pos[N][N];bool flag;void print(){ for(int i=1;i<=9;i++) printf("%s\n",sudo[i]+1);}void dfs(int x,int y){ if(y==10) { dfs(x+1,1); return ; } if(x==10) { print(); flag=1; return ; } if(sudo[x][y]!='0') { dfs(x,y+1); return ; } for(int i=1;i<=9&&!flag;i++) { if(visr[x][i]==0&&visc[y][i]==0&&visg[pos[x][y]][i]==0) { sudo[x][y]='0'+i; visc[y][i]=visr[x][i]=visg[pos[x][y]][i]=1; dfs(x,y+1); sudo[x][y]='0'; visc[y][i]=visr[x][i]=visg[pos[x][y]][i]=0; } }}void ini(){ flag = false ; memset(visr,0,sizeof(visr)); memset(visc,0,sizeof(visc)); memset(visg,0,sizeof(visg));}int main(){ for(int i=1;i<=9;i++) for(int j=1;j<=9;j++) pos[i][j]=((j-1)/3+1)+3*((i-1)/3); int T; scanf("%d",&T); for(int cas=1;cas<=T;cas++) { printf("Scenario #%d:\n",cas); ini(); for(int i=1;i<=9;i++) scanf("%s",sudo[i]+1); for(int i=1;i<=9;i++) for(int j=1;j<=9;j++) { int val=sudo[i][j]-'0'; visr[i][val]=true; visc[j][val]=true; visg[pos[i][j]][val]=true; } dfs(1,1); puts(""); } return 0;}

转载地址:http://coygx.baihongyu.com/

你可能感兴趣的文章
某公司面试java试题之【二】,看看吧,说不定就是你将要做的题
查看>>
BABOK - 企业分析(Enterprise Analysis)概要
查看>>
Linux 配置vnc,开启linux远程桌面
查看>>
NLog文章系列——如何优化日志性能
查看>>
Hadoop安装测试简单记录
查看>>
CentOS6.4关闭触控板
查看>>
ThreadPoolExecutor线程池运行机制分析-线程复用原理
查看>>
React Native 极光推送填坑(ios)
查看>>
Terratest:一个用于自动化基础设施测试的开源Go库
查看>>
修改Windows远程终端默认端口,让服务器更安全
查看>>
扩展器必须,SAS 2.0未必(SAS挺进中端存储系统之三)
查看>>
Eclipse遇到Initializing Java Tooling解决办法
查看>>
while((ch = getchar()) != '\n')
查看>>
好程序员web前端分享JS检查浏览器类型和版本
查看>>
Linux 安装oracle内核参数
查看>>
Oracle DG 逻辑Standby数据同步性能优化
查看>>
exchange 2010 队列删除
查看>>
android实用测试方法之Monkey与MonkeyRunner
查看>>
「翻译」逐步替换Sass
查看>>
H5实现全屏与F11全屏
查看>>