Problem H

数独游戏

时限:1000ms 内存限制:10000K 总时限:3000ms

描述:

数独游戏规则
在9阶方阵中,包含了81个小格(九列九行),其中又再分成九个小正方形(称为宫),每宫有九小格。
游戏刚开始时,盘面上有些小格已经填了数字(称为初盘),游戏者要在空白的小格中填入1到9的数字,
使得最后每行、每列、每宫都不出现重复的数字,而且每一个游戏都只有一个唯一的解答(称为终盘)。

输入:

一个9*9的矩阵,0表示该位置是空白。

输出:

一个9*9的矩阵,格式与输入类似。

输入样例:

900050060
020070100
300102040
703800529
000345000
516009403
050208006
007090010
030010004

输出样例:

971453268
428976135
365182947
743861529
892345671
516729483
154238796
687594312
239617854

#include<stdio.h>
#include<string.h>
int a[9][9];
void search(int n);
int  canplace(int n,int i);
void output();
int main()
{
    char b[9][10];
    int q,j;
    for(q=0;q<9;q++)
    {
        for(j=0;j<=9;j++)//由于输入数据之间不含空格,所以只能用字符串存起来再转换成整型数组
        {
            scanf("%c",&b[q][j]);
            if(b[q][j]!='\n')//换行时字符串会自动读取换行符,所以应该考虑到这种情况
            a[q][j]=b[q][j]-'0';//字符型数组转换成整型数组
        }
    }
    search(0);//回溯法求解
    return 0;
}
void search(int n)
{
    int i;
    if(n==81)output();
    else if(a[n/9][n%9]!=0)search(n+1);若该位置上已有数字,则跳转至下一个位置
    else if(a[n/9][n%9]==0)
    { 

        for(i=1;i<=9;i++)
        {
            if(canplace(n,i))//判断该位置上能否放置数字i,若可以为其赋值,跳转至下一位置
            {
                a[n/9][n%9]=i;
            search(n+1);
                }
            a[n/9][n%9]=0;若若找不到可以满足条件的数放置在该位置,还原它本来的值,回溯寻找下一组可能的解,每次调用完之后都需要让它返回与原来的值
        }

    }

}
int  canplace(int n,int i)
{
    int j,k,flag=1;
    for(j=0;j<=8;j++)//判断该列上是否有该数字
    {
        if(a[n/9][j]==i)
        {
            flag=0;
            break;
        }
    }
    if(flag==1)
    {
    for(j=0;j<=8;j++)判断该行是否有该数字
    {
        if(a[j][n%9]==i)
        {
        flag=0;
        break;
    }
    }
}
if(flag==1)//判断其所在的小九宫格里是否有该数字
    {
        for(j=(n/9/3)*3;j<(n/9/3)*3+3;j++)
        {
            for(k=(n%9/3)*3;k<(n%9/3)*3+3;k++)
            {
                if(a[j][k]==i)
                {
                    flag=0;
                    break;
                }
                if(flag==0)break;
            }
        }
}
    return flag;
}
void output()//输出数组
{
    int i,j;
    for(i=0;i<9;i++)
    {
        for(j=0;j<9;j++)
        {
            printf("%d",a[i][j]);
        }
        printf("\n");
    }

}

C语言回溯法九宫格数独问题相关推荐

  1. 【算法分析】回溯法解数独(九宫格)算法

    这篇文章,是来详细介绍怎样写出一个算法,来解出所有的数独问题.算法的程序运行时间,缩减在了毫秒级别.等到这篇文章结束,我会抽时间写一篇文章,介绍如何生成一个随机的唯一解的数独问题.另外,为了做图形方便 ...

  2. 回溯法求解数独问题(最简单,通俗易懂,附C++代码)

    问题描述:数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个九宫格内的数字均含1-9,不重复 要求:设计算法随机生成不同 ...

  3. python数独伪代码回溯法_数独的暴力回溯解法和Python GUI

    数独起源于18世纪初瑞士数学家欧拉等人研究的拉丁方阵,20世纪70年代,经过美国及日本学者的推广和改良,定名为数独(Sudoku),大致的意思是"独个的数字"或"只出现一 ...

  4. 回溯算法背包问题迭代c语言,回溯法解决0_1背包问题(迭代和递归)

    问题:0/1背包问题 例子:weight数组代表物品重量,value数组代表物品价值,M代表背包容量.背包是按单位价值递减的顺序排列的,即value[i]/weight[i]>value[i-1 ...

  5. c语言回溯法,回溯法 实现 排列组合(C 语言版本)

    * 所谓回溯:就是搜索一棵状态树的过程,这个过程类似于图的深度优先 * 搜索(DFS),在搜索的每一步(这里的每一步对应搜索树的第i层)中 * 产生一个正确的解,然后在以后的每一步搜索过程中,都检查其 ...

  6. 用代码证明自己闲的蛋疼(三)——回溯法做数独

    数独大家应该都玩过,1~9数字,满足每一行.每一列.每一个粗线宫(3*3)内的数字均含1-9,不重复. 起始会有一些给定的值,然后我们去填剩余的数,一个合理的数独最终解一定是唯一的. 九日哥也很喜欢玩 ...

  7. python数独伪代码回溯法_数独 #回溯算法 #CTF

    1. intro:巅峰极客的一道逆向 刷巅峰极客2020里的rev题fu!kpy,复杂得不行但是看到if d[1][0] != '8' or d[1][7] != '2'和if check(h1) ! ...

  8. 递归回溯法求数独全部解

    项目介绍 QT5做的数独求解程序,可以判断数独解的个数(如果非唯一解). 运行截图 源码说明 使用MSVC + QT5平台,故* .cpp和* .h文件均采用UTF8 + BOM编码.如果切换到Min ...

  9. N皇后问题(C语言)—回溯法

    一.问题描述 问题描述:在N×N格的国际象棋上摆放N个皇后,使其不能互相攻击,即不能处于同一列或同一行,也不能处在同一斜线上,请问有多少种摆法? 不能放皇后的位置及位置之间的关系: 二.代码实现 #i ...

最新文章

  1. Py之scikit-learn:机器学习Sklearn库的简介、安装、使用方法(ML算法如何选择)、代码实现之详细攻略
  2. CF思维联系– Codeforces-988C Equal Sums (哈希)
  3. seo自动发外链_一套节约成本全网营销方案-小小课堂SEO培训教程
  4. springboot整合canal
  5. 算法的基本控制结构之循环结构
  6. Python decorator
  7. linux内核mtd驱动程序与sd卡驱动程序,Linux内核MTD驱动程序与SD卡驱动程序(2)
  8. 删除一个带有文件的文件夹
  9. linux中config文件怎么打开,linux-如何使用CoreOS的cloud-config文件启动Dock...
  10. Python之计算机算法基础总结(借鉴、整理)、排序算法、查找算法
  11. word内容被锁定无法进行修改的解决办法
  12. Web前端大作业—— 饮食餐饮网站 咖啡网站pc端带轮播(5个页面)HTML+CSS+JavaScript 学生美食网页设计作品 学生餐饮文化网页模板
  13. 如何帮银行保持长期竞争力?融360天机公布独家秘诀
  14. 百度地图LV1.5实践项目开发工具类bmap.util.jsV1.3
  15. 简述计算机动画制作流程,Mg动画制作流程——六大步骤
  16. 数学建模:整数规划—指派模型与匈牙利算法
  17. 旧金山大学的算法可视化学习教程 赞的教程,将抽象的算法可视化,易于理解
  18. ZJOI2016一点也不好玩啊
  19. 阿里云OSS PicGo 配置图床教程 超详细
  20. 魔兽世界经典怀旧服务器架设教程

热门文章

  1. c++图像处理入门教程
  2. Golang教程:(十三)Map
  3. 阿里巴巴 淘宝 盈利模式
  4. 最小二乘法在飞思卡尔智能车路径搜索中的应用
  5. 例说Verilog HDL和VHDL区别,助你选择适合自己的硬件描述语言
  6. 新型敏捷硬件设计语言---Chisel初识
  7. GENESIS公链将打破不同区块链孤岛效应
  8. 成都大数据培训之log4j slf4j 需要注意的地方
  9. Go 函数式编程实战
  10. 火车票软件哪个好用_买火车票最好的软件是哪一个?