`

一个数独的暴力搜索通用程序——brute force search for SouKou

阅读更多
 int fixed[9][9];
void PRINT(int sudu[],int i,int j)
{
    for(int i=0;i<9;i++)
    {
        for(int j=0;j<9;j++)
        {
            printf("%2d,",sudu[i*9+j]);
        }
        printf("\n");
    }
}
void tryNext(int sudu[],int i,int j)
{
    //if(valid)
       int num=1; 
       bool valid=true;
       if(fixed[i][j])
       {
           if(j>=8)
           {
               if(i==8)
               {
                   PRINT(sudu,i,j);
               }
               else 
                   tryNext(sudu,i+1,0);
           }
           else
            tryNext(sudu,i,j+1);
           return;
       }

   for( num=1;num<=9;num++)
   {
       //行是否冲突
       int k=0;
       for(;k<9;k++)
       {
           if(sudu[i*9+k]==num)
           {
               goto NEXT;
           }
       }
       //列是否冲突
       for(k=0;k<9;k++)
       {
           if(sudu[k*9+j]==num){
               goto NEXT;
           }
       }
       //小矩形是否冲突
        int h = i/3;
        int l = j/3;

        for(int m=0;m<3;m++)
        {
            for(int n=0;n<3;n++)
            if(sudu[(h*3+m)*9+(l*3)+n]==num ){
                    goto NEXT;
            }
        }

        if(valid)
        {
            //都不冲突
            sudu[i*9+j]=num;
            if(j>=8)
            {
                if(i==8)
                {
                    PRINT(sudu,i,j);
                }
                else {
                     tryNext(sudu,i+1,0);
                }
            }
            else
                tryNext(sudu,i,j+1);
        }
NEXT:;
   }
   sudu[i*9+j]=0;
 }

int main(int argc,char*argv[])
{
    int sudu[9][9]={
 8,+0,+0,+0,+0,+0,+0,+0,+0,
+0,+0, 3, 6,+0,+0,+0,+0,+0,
+0, 7,+0,+0, 9,+0, 2,+0,+0,
+0, 5,+0,+0,+0, 7,+0,+0,+0,
+0,+0,+0,+0, 4, 5, 7,+0,+0,
+0,+0,+0, 1,+0,+0,+0, 3,+0,
+0,+0, 1,+0,+0,+0,+0, 6, 8,
+0,+0, 8, 5,+0,+0,+0, 1,+0,
+0, 9,+0,+0,+0,+0, 4,+0,+0,
    };

    for(int i=0;i<9;i++)
    {
        for(int j=0;j<9;j++)
        {
            if(sudu[i][j]!=0)
                fixed[i][j] = 1;
        }
    }
    tryNext(&sudu[0][0],0,0);
    return 0;
}

 

 这个不管什么样的初始化,全都重新搜索一遍,会搜索所有可能的结果,而不是搜索到结果后就停止的那种,暴力法。

分享到:
评论

相关推荐

    微信小程序——[小游戏类]数独小游戏(截图+源码).zip

    微信小程序——[小游戏类]数独小游戏(截图+源码).zip 微信小程序——[小游戏类]数独小游戏(截图+源码).zip 微信小程序——[小游戏类]数独小游戏(截图+源码).zip 微信小程序——[小游戏类]数独小游戏(截图+...

    数独————————C++

    一个简单的解数独的小程序 //***求数独的解,参数mod为0或1,time0为搜索开始时的时间,mod=0时仅检查Data1中数独是否有解,有解则抛出1,mod=1时求出所有解并输出*** { int i,j,im=-1,jm,min=10; int mark[10]; ...

    Sudoku:这是我对数独应用程序的尝试——主要是为了解决计算这一切的挑战

    这是我对数独应用程序的尝试——主要是为了解决计算这一切的挑战。 这最初是在我在周末的 Code Camp 上参加关于使用函数式编程解决数独的课程之后开始的——其中之一是它最终在单行递归调用的函数中看起来非常优雅和...

    基于启发式搜索解决具体数独问题的MATLAB程序源码.zip

    基于启发式搜索解决具体数独问题的MATLAB程序源码.zip基于启发式搜索解决具体数独问题的MATLAB程序源码.zip基于启发式搜索解决具体数独问题的MATLAB程序源码.zip基于启发式搜索解决具体数独问题的MATLAB程序源码.zip...

    微信小程序 小游戏类 数独小游戏 (源代码+截图)

    微信小程序 小游戏类 数独小游戏 (源代码+截图)微信小程序 小游戏类 数独小游戏 (源代码+截图)微信小程序 小游戏类 数独小游戏 (源代码+截图)微信小程序 小游戏类 数独小游戏 (源代码+截图)微信小程序 小...

    数独求解程序游戏设计报告书

    - **Sudoku Solver by Nick Smallbone**:这是一个用Python语言编写的数独求解程序,支持多种求解算法。 - **Sudoku Assistant v1.09 by Andrew Stuart**:提供了多种辅助功能,如提示、错误检查等,帮助用户逐步...

    微信小程序数独小游戏小程序源码(源码+源码导入视频教程+源码导入文档教程)小程序精选源码亲测可用

    数独游戏小程序源码的提供,是对于开发人员来说一个很好的学习和实践案例,它可以帮助我们了解微信小程序的基本架构和开发流程。 1. **微信小程序开发环境搭建**: 在开始编写数独小程序之前,首先需要安装微信...

    多功能数独解题出题程序

    3. **用户友好界面**:"数独.exe"文件很可能是程序的执行文件,意味着软件提供了一个直观易用的图形用户界面,用户可以方便地输入、查看和解决数独问题。 4. **错误检测与修正**:在解题过程中,软件会实时检查用户...

    微信小程序源码-数独小游戏.zip

    微信小程序源码-数独小游戏.zip微信小程序源码-数独小游戏.zip微信小程序源码-数独小游戏.zip微信小程序源码-数独小游戏.zip微信小程序源码-数独小游戏.zip微信小程序源码-数独小游戏.zip微信小程序源码-数独小游戏....

    微信小程序开发-游戏类-数独案例源码.zip

    在这个“微信小程序开发-游戏类-数独案例源码.zip”压缩包中,你将获得一个实现数独游戏的小程序示例。数独是一种逻辑解谜游戏,玩家需要填充一个9x9的网格,使得每一行、每一列以及每个3x3的小宫格内都包含数字1到9...

    数学建模——数独问题

    数独是一种基于逻辑的填充数字游戏,玩家需要在一个9×9的网格中填入数字,使得每一行、每一列以及每一个3×3的小方格都恰好包含数字1至9各一次。为了量化数独问题的难度并有效地生成不同难度级别的数独谜题,本节...

    微信小程序实现九宫格数独

    在这个项目中,我们关注的是如何利用微信小程序来实现一个九宫格数独游戏。 首先,我们需要了解数独的基本规则。数独是一种基于逻辑的数字填充游戏,通常在9x9的九宫格中进行,分为9个3x3的小九宫格。每个小九宫格...

    shudu.rar_mfc 数独_数独_数独 MFC_数独程序

    在“shudu.rar_mfc 数独_数独_数独 MFC_数独程序”这个压缩包中,我们可以看到一个使用MFC(Microsoft Foundation Classes)框架在VC6.0环境下开发的数独求解程序。 MFC是微软为Windows平台提供的一套C++类库,它极...

    数独求解算法程序(程序开发)

    总的来说,数独求解算法程序是计算机科学和算法设计的一个经典实例,它涉及到搜索策略、逻辑推理和优化技巧等多个领域。通过学习和理解这种程序,我们可以更深入地了解如何用代码来解决问题,同时也能够锻炼我们的...

    数独——个人作品

    程序完成了两大核心功能:计算机求解、随机出题 计算机求解数独的算法有很多,比较典型的是回溯法,比较有名的是舞蹈链算法, 都是毫秒级解题。本程序采用舞蹈链算法,以DLL形式加载调用。 程序的界面基于.net完成...

    数独模型LINGO求解程序

    数独游戏是数学领域中的一个经典问题。利用LINGO语言,可以建立一个数独模型,并通过LINGO的优化算法来解决该问题。LINGO是一种专门用于解决线性和非线性优化问题的工具,具有简洁的语法和高效的求解器。 LINGO中的...

    数独解题程序和出题程序

    可以解决所有的数独题目,能够出题,每次出的题都不相同

    数独程序(c)

    标题 "数独程序(c)" 指的是一个用 C 语言编写的数独解决方案。这个程序可能包含了实现数独解法的核心算法,以及相关的数据结构和辅助函数。描述中提到程序注释是用日语编写的,这可能会对非日语使用者造成一些阅读...

    一个简单的Delphi四阶数独程序代码

    在这个场景中,我们关注的是一个使用Delphi编写的四阶数独(Sudoku)程序。四阶数独相对于传统的九阶数独而言,难度和复杂度更低,更适合初学者理解和实践。 在Delphi中开发数独程序,主要涉及到以下几个核心知识点...

    数独小程序

    这款程序的核心功能是根据数独的规则,帮助用户填好数独棋盘上的数字,为数独爱好者提供了一个便捷的工具。 数独是一种逻辑游戏,起源于18世纪的瑞士,流行于20世纪末的日本,全球范围内广受欢迎。它基于一个9x9的...

Global site tag (gtag.js) - Google Analytics