码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 2676 数独

时间:2018-08-25 16:33:54      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:直接   view   cout   还原   string   技术   name   数字   click   

题意:

  给你一个9*9的未完成的数独,将其填完

思路:

  暴搜

  从第一个位置搜起,有数字就直接跳过搜下一个位置,没数字就填数字
  。通过行,列,九宫格不能重复填数,把能填的数填进去就可以了

 

技术分享图片
//By DXY 2018.04.27
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define maxn 100000
int n,m;
int num[10][10];
char a[10];
bool flag;
bool check(int x,int cnt)
{
    int hang=cnt/9;//
    int lie=cnt%9;//
    for(int i=0;i<9;i++)//同行中不重复 
    {
        if(num[hang][i]==x)
            return false;
    }
    for(int i=0;i<9;i++)//同列中不重复 
    {
        if(num[i][lie]==x)
            return false;
    }
    int left=hang/3*3;//九宫格左上角的行和列 
    int right=lie/3*3;
    for(int i=left;i<left+3;i++)//九宫格中不重复 
        for(int j=right;j<right+3;j++)
            if(num[i][j]==x)
                return false;
    return true;//可以将此数填入空格中 
}
void dfs(int cnt)
{
    if(cnt>80||flag)//全部填满,返回 
    {
        flag=true;
        return ;
    }
    if(num[cnt/9][cnt%9])//位置上有数,直接搜下一个 
    {
        dfs(cnt+1);
        if(flag)
        return ;
    }
    else 
    {
        for(int i=1;i<=9;i++)//填数 
        {
            if(check(i,cnt))
            {
                num[cnt/9][cnt%9]=i;
                dfs(cnt+1);
                if(flag)
                    return ;
                num[cnt/9][cnt%9]=0;//回溯,还原现场 
            }
        }
    }
}
int main()
{
    scanf("%d",&n);
    while(n--)
    {
        flag=false;
        for(int i=0;i<9;i++)
        {
            scanf("%s",a);
            for(int j=0;j<9;j++)
                num[i][j]=a[j]-0;
        }
        dfs(0);//从第一个位置开始搜 
        for(int i=0;i<9;i++)
        {
            for(int j=0;j<9;j++)
            {
                cout<<num[i][j];
            }
            cout<<endl;
        }
    }    return 0;
}
View Code

 

POJ 2676 数独

标签:直接   view   cout   还原   string   技术   name   数字   click   

原文地址:https://www.cnblogs.com/Dxy0310/p/9534234.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!