博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2676
阅读量:5796 次
发布时间:2019-06-18

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

问题描述:

数独问题

解题要点:

回溯时要恢复回溯之前的所有状态,一开始s数组回溯时忘了清零所以结果很奇怪

代码:

#include
#include
#include
#include
#include
#include
using namespace std;const int maxn = 10;char input[maxn][maxn];int s[maxn][maxn];int cubicrecord[maxn][maxn];int linerecord[maxn][maxn];int columnrecord[maxn][maxn];bool success = false;void dfs(int id);int main(){ //freopen("1.txt","r",stdin); //freopen("2.txt","w",stdout); int t,i,j,part; scanf("%d",&t); while(t--) { success = false; memset(cubicrecord,0,sizeof(cubicrecord)); memset(linerecord,0,sizeof(linerecord)); memset(columnrecord,0,sizeof(columnrecord)); memset(s,0,sizeof(s)); memset(input,0,sizeof(input)); for(i = 1; i < maxn;++i) { scanf("%s",input[i]); for(j = 1; j < maxn; ++j) { s[i][j] = input[i][j-1] - '0'; //scanf("%d",s[i]+j); part = ((i-1)/3)*3+((j-1)/3+1); //p[i][j] = part; cubicrecord[part][s[i][j]] = 1; linerecord[i][s[i][j]]=1; columnrecord[j][s[i][j]]=1; } } /*for(i = 1; i < maxn; ++i){ for(j = 1; j < maxn;++j){ printf("%d",p[i][j]); } printf("\n"); } return 0;*/ dfs(1); for(i = 1; i < maxn; ++i){ for(j = 1; j < maxn; ++j){ printf("%d",s[i][j]); } printf("\n"); } } return 0;}void dfs(int id){ if(success) return; int x = (id - 1) / 9 + 1; int y = (id - 1) % 9 + 1; int part = ((x-1)/3)*3+((y-1)/3+1); if(id == 81) { if(s[x][y]) { success = true; return; } for(int i = 1; i < maxn; ++i) { if((!linerecord[x][i])&&(!columnrecord[y][i])&&(!cubicrecord[part][i])) { s[9][9] = i; success = true; break; } } return; } if(s[x][y]) //这个格子已经填完了 { dfs(id+1); if(success) return; } else { for(int i = 1; i < maxn; ++i) { if((!linerecord[x][i])&&(!columnrecord[y][i])&&(!cubicrecord[part][i])) { s[x][y] = i; linerecord[x][i] = 1; columnrecord[y][i] = 1; cubicrecord[part][i] = 1; dfs(id+1); if(success) break; linerecord[x][i] = 0; columnrecord[y][i] = 0; cubicrecord[part][i] = 0; s[x][y] = 0; } } if(success) return; }}

  

转载于:https://www.cnblogs.com/warmfrog/p/3648456.html

你可能感兴趣的文章
简单按日期查询mysql某张表中的记录数
查看>>
自动化部署之jenkins发布PHP项目
查看>>
C/C++编程可用的Linux自带工具
查看>>
三种数据分析法提升电商运营
查看>>
哪个线程执行 CompletableFuture’s tasks 和 callbacks?
查看>>
《数据科学与大数据分析——数据的发现 分析 可视化与表示》一2.10 练习
查看>>
Oracle ASM 翻译系列第六弹:高级知识 如何映射asmlib管理的盘到它对应的设备名...
查看>>
多线程之volatile关键字
查看>>
如何判断webview是不是滑到底部
查看>>
Raptor实践2——控制结构
查看>>
Smartisan OS一步之自定义拖拽内容
查看>>
海贼王十大悲催人物
查看>>
org.hibernate.MappingException: No Dialect mapping for JDBC type: -1 搞定!
查看>>
热点热词新闻资讯API开放接口(永久免费开放)
查看>>
【第二章】 IoC 之 2.2 IoC 容器基本原理 —— 跟我学Spring3
查看>>
8.1_Linux习题和作业
查看>>
我的友情链接
查看>>
11.排序算法_6_归并排序
查看>>
Redis redis-cli 命令列表
查看>>
.NET框架设计—常被忽视的框架设计技巧
查看>>