博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2918 求解数独
阅读量:6306 次
发布时间:2019-06-22

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

思路:dfs,试填每个方格,当搜索的范围超过9×9时说明已经找到解
#include
#include
#include
#include
#include
using namespace std; int map[15][15], flag; bool CanPlace(int x, int y, int num){ for(int i = 1; i <= 10; i ++) if(map[x][i] == num || map[i][y] == num) return false; int row = ((x-1)/3)*3+1; int col = ((y-1)/3)*3+1; for(int i = row; i < row+3; i ++){ for(int j = col;j < col+3; j ++ ) if(map[i][j] == num) return false; } return true; }void dfs(int x, int y){ if(x == 9 && y > 9){ flag = 1; for(int i = 1; i < 10; i ++){ for(int j = 1; j < 10; j ++) printf("%d", map[i][j]); printf("\n"); } return; } if(y > 9){ x++; y = 1; } if(!map[x][y]){ for(int i = 1;i < 10; i ++){ if(CanPlace(x, y, i)){ map[x][y] = i; dfs(x, y+1); if(flag) return; map[x][y] = 0; } } }else dfs(x, y+1); }int main(){ char str[11]; int t,cnt = 0; //freopen("in.c", "r", stdin); scanf("%d", &t); while(t--){ printf("Scenario #%d:\n", ++cnt); memset(str, 0, sizeof(str)); for(int i = 0; i < 9; i ++){ scanf("%s", str); for(int j = 0; j < 9; j ++){ map[i+1][j+1] = str[j]-'0'; } } flag = 0; dfs(1, 1); puts(""); } return 0; }

转载于:https://www.cnblogs.com/wangzhili/p/3950236.html

你可能感兴趣的文章
城市 | 800个地铁站数据透析的京沪白领图鉴:隐形土豪、无产中产阶级和猪猪女孩...
查看>>
前端脚本!网站图片素材中文转英文
查看>>
linux的常用易忘命令
查看>>
PHP 分割字符串
查看>>
java 基于QRCode、zxing 的二维码生成与解析
查看>>
关于职业规划的一些思考
查看>>
img垂直水平居中与div
查看>>
Fabrik – 在浏览器中协作构建,可视化,设计神经网络
查看>>
防恶意注册的思考
查看>>
http2-head compression
查看>>
C# 命名空间
查看>>
订餐系统之同步美团商家订单
查看>>
使用ArrayList时设置初始容量的重要性
查看>>
Java Web-----JSP与Servlet(一)
查看>>
Maven搭建SpringMVC+Mybatis项目详解
查看>>
关于量子理论:最初无意的简化,和一些人有意的强化和放大
查看>>
CentOS 6.9通过RPM安装EPEL源(http://dl.fedoraproject.org)
查看>>
“区块链”并没有什么特别之处
查看>>
没有功能需求设计文档?对不起,拒绝开发!
查看>>
4星|《先发影响力》:影响与反影响相关的有趣的心理学研究综述
查看>>