poj 2676 Sudoku ( dfs )
dfs 用的还是不行啊,做题还是得看别人的博客!!!
题目:http://poj.org/problem?id=2676
题意:把一个9行9列的网格,再细分为9个3*3的子网格,要求每行、每列、每个子网格内都只能使用一次1~9中的一个数字,即每行、每列、每个子网格内都不允许出现相同的数字。
0是待填位置,其他均为已填入的数字。
要求填完九宫格并输出(如果有多种结果,则只需输出其中一种)
如果给定的九宫格无法按要求填出来,则输出原来所输入的未填的九宫格
参考博客:http://www.cnblogs.com/tanhehe/archive/2013/08/07/3243073.html
http://blog.csdn.net/lyy289065406/article/details/6647977
r、c、g数组用来剪枝
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
#include<iomanip>
#include<cmath>
#include<map>
#include<vector>
#include<algorithm>
using namespace std; struct node
{
int x,y;
}q[];
int r[][],c[][],g[][][];
int G[][],cnt; int dfs(int cn) //表示dfs 递归还是不太会
{
int x,y;
if(cn<) return ;
x=q[cn].x; y=q[cn].y;
for(int k=; k<=; k++)
{
if(r[x][k] || c[y][k] || g[x/][y/][k]) continue;
r[x][k]=c[y][k]=g[x/][y/][k]=;
G[x][y]=k;
if(dfs(cn-)) return ;
r[x][k]=c[y][k]=g[x/][y/][k]=;
}
return ;
}
int main()
{
int t,k;
cin>>t;
while(t--)
{
cnt=;
memset(r,,sizeof(r));
memset(c,,sizeof(c));
memset(g,,sizeof(g));
for(int i=; i<; i++)
{
for(int j=; j<; j++)
{
scanf("%1d",&G[i][j]); //每次输入一个整数
k=G[i][j];
if(k!=)
r[i][k]=c[j][k]=g[i/][j/][k]=; //g数组,每个子网格里是一样的
else
q[cnt++]=(node){i,j}; //赋值到结构体里,学习了
}
}
dfs(cnt-);
for(int i=; i<; i++)
{
for(int j=; j<; j++)
cout<<G[i][j];
printf("\n");
}
}
return ;
}
poj 2676 Sudoku ( dfs )的更多相关文章
- ACM : POJ 2676 SudoKu DFS - 数独
SudoKu Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu POJ 2676 Descr ...
- 深搜+回溯 POJ 2676 Sudoku
POJ 2676 Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17627 Accepted: 8538 ...
- POJ 2676 Sudoku (数独 DFS)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14368 Accepted: 7102 Special Judg ...
- POJ 2676 - Sudoku - [蓝桥杯 数独][DFS]
题目链接:http://poj.org/problem?id=2676 Time Limit: 2000MS Memory Limit: 65536K Description Sudoku is a ...
- POJ 2676 Sudoku (DFS)
Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11694 Accepted: 5812 Special ...
- POJ - 2676 Sudoku 数独游戏 dfs神奇的反搜
Sudoku Sudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smalle ...
- DFS POJ 2676 Sudoku
题目传送门 题意:数独问题,每行每列以及每块都有1~9的数字 分析:一个一个遍历会很慢.先将0的位子用vector存起来,然后用rflag[i][num] = 1 / 0表示在第i行数字num是否出现 ...
- 搜索 --- 数独求解 POJ 2676 Sudoku
Sudoku Problem's Link: http://poj.org/problem?id=2676 Mean: 略 analyse: 记录所有空位置,判断当前空位置是否可以填某个数,然后直 ...
- POJ 2676 Sudoku
Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12005 Accepted: 5984 Special ...
随机推荐
- MySQL主从设定
MySQL的安装 一.下载MySQL http://dev.mysql.com/downloads/mysql/ 二.安装 $tar -xzvf mysql-5.1 ...
- java环境搭建的问题
本人用eclipse开发,首先在java官网中下载最新版本的jdk,jdk的版本一定要与eclipse版本位数相同,否则会提示错误“Java was started but returned exit ...
- 使用WebGL实现一个Viewer来显示STL文件
关键字:WebGL,STL,ThreeJS,Chrome,Viewer,Python3.4, HTML5,Canvas. OS:Windows 10. 本文介绍如何使用ThreeJS来实现一个WebG ...
- Battle Over Cities (25)(DFS、连通图)
It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...
- 【postgresql】创建自增SEQUENCE
CREATE SEQUENCE circlefence_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; alte ...
- Linux学习笔记(2)-用户和用户组
用户(user)和用户组(group)概念 linux是一个多用户操作系统,他允许多个用户登录linux系统进行各自不同的操作.为了方便管理用户不同的权限,组的概念应用而生,一个组可以包含多个用户,共 ...
- ServiceStack.Redis
什么是Redis 首先,简述一下什么是Redis. Redis是一个开源.支持网络.基于内存.键值对存储数据库,使用ANSI C编写.从2013年5月开始,Redis的开发由Pivotal赞助.在这之 ...
- ExtJS4.2学习(七)EditorGrid可编辑表格(转)
鸣谢地址:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-14/176.html ------------- ...
- obj转换成数组
原则上obj是不能转换成数组的.首先array也是obj.只是一个特殊的object. obj一个很关键的点,是拥有成员和方法,撇开方法不说,obj就是一个key-value结构.也就是哈希数组,而j ...
- (五)乱入之如何使用MNIST数据库
(五)乱入之如何使用MNIST数据库 今天花了整整一天时间查各种资料,终于搞清楚了怎么使用MNIST数据库.哈哈,MNIST,是不是高端洋气上档次?是不是不知道是什么东东? MNIST是一个据说很出名 ...