返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++如何实现数独快速求解
  • 792
分享到

C++如何实现数独快速求解

2023-06-29 15:06:33 792人浏览 薄情痞子
摘要

这篇文章主要介绍“c++如何实现数独快速求解”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++如何实现数独快速求解”文章能帮助大家解决问题。什么是数独数独是源自18世纪瑞士的一种数学游戏。是一种运

这篇文章主要介绍“c++如何实现数独快速求解”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++如何实现数独快速求解”文章能帮助大家解决问题。

什么是数独

数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。
数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。

解决思路

遍历数独表,找出数字为空(以0填充)的表格;
2、找出每个数据中空的表格中可以填充的数字;
3、找到其中可以填充的数字个数最少的表格;
4、将每个数字分别填充到该表格中;
5、递归重复步骤1-4,直到表格中不再有数字为0的表格

#include <iOStream>#include <ctime>using namespace std;struct Position{    int row;    int col;    int *res;};Position* findMinBlank(int board[][9]){    int *validNums(int board[][9], int row, int col);    Position *pos = new Position();    pos->res = 0;    int *res;    int total=0, minum = 10;    for(int i=0; i<9; ++i)        for(int j=0; j<9; ++j)        {            if(board[i][j]!=0)                continue;            res = validNums(board, i, j);            total = 0;            for(int p=0; p<9; ++p)            {                if(res[p]!=0)                {                    ++ total;                }            }            if(total<minum)            {                delete []pos->res;                pos->row = i;                pos->col = j;                pos->res = res;                minum = total;            }            else                delete []res;        }    return pos;}int *validNums(int board[][9], int row, int col){    int *res = new int[9] {1,2,3,4,5,6,7,8,9};    for (int i = 0; i < 9; i++)    {        res[board[row][i]-1] = 0;        res[board[i][col]-1] = 0;    }    int p = row / 3 * 3;    int q = col / 3 * 3;    for (int x = p; x < p + 3; x++)        for (int y = q; y < q + 3; y++)         {            res[board[x][y]-1] = 0;        }    return res;}void printResult(int result[][9] ){    for (int i = 0; i < 9; i++)     {        for (int j = 0; j < 9; j++)         {            cout << result[i][j] << "  ";        }        cout << endl;    }    cout << endl;}void sudoku(int board[][9]){    Position *pos = findMinBlank(board);    if(!pos->res)    {        cout<<"time:"<<clock()/1e6<<endl;        printResult(board);        return;    }    for(int i=0;i<9;++i)    {        if(pos->res[i]==0)            continue;        board[pos->row][pos->col] = pos->res[i];        sudoku(board);    }    board[pos->row][pos->col] = 0;    delete pos->res;    delete pos;}int main(){    int start = clock();    cout<<start/1e6<<endl;    int board[][9] =        {            0, 0, 0, 0, 0, 0, 0, 1, 0,            4, 0, 0, 0, 0, 0, 0, 0, 0,            0, 2, 0, 0, 0, 0, 0, 0, 0,            0, 0, 0, 0, 5, 0, 4, 0, 7,            0, 0, 8, 0, 0, 0, 3, 0, 0,            0, 0, 1, 0, 9, 0, 0, 0, 0,            3, 0, 0, 4, 0, 0, 2, 0, 0,            0, 5, 0, 1, 0, 0, 0, 0, 0,            0, 0, 0, 8, 0, 6, 0, 0, 0        };    printResult(board);    sudoku(board);    int end = clock();    cout <<"time:" << (end - start)/1e6 << endl;    return 0;}

C++如何实现数独快速求解

关于“C++如何实现数独快速求解”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网其他教程频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: C++如何实现数独快速求解

本文链接: https://lsjlt.com/news/325598.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++如何实现数独快速求解
    这篇文章主要介绍“C++如何实现数独快速求解”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++如何实现数独快速求解”文章能帮助大家解决问题。什么是数独数独是源自18世纪瑞士的一种数学游戏。是一种运...
    99+
    2023-06-29
  • C++实现数独快速求解
    什么是数独 数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、...
    99+
    2024-04-02
  • C++实现LeetCode(37.求解数独)
    [LeetCode] 37. Sudoku Solver 求解数独 Write a program to solve a Sudoku puzzle by filling the e...
    99+
    2024-04-02
  • python如何实现快速的求和函数
    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!                     ...
    99+
    2023-01-31
    如何实现 函数 快速
  • C#实现数独解法
    数独简介 数独(shù dú)是源自18世纪瑞士的一种数学游戏。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出...
    99+
    2024-04-02
  • C#如何实现快速查询文件
    今天小编给大家分享一下C#如何实现快速查询文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。相信使用过Everything的...
    99+
    2023-07-02
  • C语言如何实现快速排序
    今天小编给大家分享一下C语言如何实现快速排序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。交换排序的思想基本思想:所谓交换,...
    99+
    2023-07-02
  • C语言如何实现数独程序
    这篇文章主要介绍“C语言如何实现数独程序”,在日常操作中,相信很多人在C语言如何实现数独程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言如何实现数独程序”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-05
  • Golang实现快速求幂的方法详解
    今天讲个有趣的算法:如何快速求nm,其中n和m都是整数。 为方便起见,此处假设m>=0,对于m< 0的情况,求出n|m|后再取倒数即可。 另外此处暂不考虑结果越界的情况(...
    99+
    2024-04-02
  • Golang怎么实现快速求幂
    这篇文章主要介绍了Golang怎么实现快速求幂的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang怎么实现快速求幂文章都会有所收获,下面我们一起来看看吧。为方便起见,此处假设m>=0,对于m<...
    99+
    2023-07-02
  • C语言如何实现快速排序算法
    这篇文章将为大家详细讲解有关C语言如何实现快速排序算法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码#define  _CRT_SECURE_NO_WARNINGS 1/...
    99+
    2023-06-22
  • 如何使用C语言实现快速排序
    本篇内容主要讲解“ 如何使用C语言实现快速排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ 如何使用C语言实现快速排序”吧!快速排序的基本思想是:任取待排序数列中的一个数作为 key 值,通过...
    99+
    2023-07-05
  • 如何使用Python进行数独求解
    这篇文章主要介绍“如何使用Python进行数独求解”,在日常操作中,相信很多人在如何使用Python进行数独求解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Python进行数独求解”的疑惑有所帮助!...
    99+
    2023-06-29
  • SQL如何快速实现UCF
    这篇文章主要介绍了SQL如何快速实现UCF,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。SQLselect uid1,u...
    99+
    2024-04-02
  • web如何实现快速排序
    这篇文章主要为大家展示了“web如何实现快速排序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web如何实现快速排序”这篇文章吧。快速排序是对冒泡排序的一种改进。它的基本思想是:通过一次排序将要...
    99+
    2023-06-27
  • Python如何实现快速排序
    这篇文章主要介绍“Python如何实现快速排序”,在日常操作中,相信很多人在Python如何实现快速排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何实现快速排序”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-04
  • SEO如何实现快速排名
    这篇文章主要为大家展示了“SEO如何实现快速排名”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SEO如何实现快速排名”这篇文章吧。邮箱,可以使用雅虎的替身邮(不知道的百度)跟10分钟邮箱(10m...
    99+
    2023-06-10
  • C#实现快速排序算法
    快速排序是应用最广泛的排序算法,流行的原因是它实现简单,适用于各种不同情况的输入数据且在一般情况下比其他排序都快得多。 快速排序是原地排序(只需要一个很小的辅助栈),将长度为 N 的...
    99+
    2024-04-02
  • C语言实现快速排序
    目录1. hoare法方法与步骤代码实现2. 挖坑法方法与步骤代码实现3. 前后指针法方法与步骤代码实现4. 快速排序的缺点与优化1.快速排序的缺点2.快速排序的优化① 三数取中法选...
    99+
    2023-05-14
    C语言快速排序算法 C语言快速排序 C语言排序算法
  • C#快速实现拖放操作
    拖放操作是一个我比较喜欢的用户体验,但实现起来稍显麻烦,这里我将它的常用方式简单的集合了一下,作为扩展方法,以便快速调用: static class DrapDropExtend {...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作