c++递归解数独方法示例

 更新时间:2014年03月28日 10:00:43   作者:  
这篇文章主要介绍了c++递归解数独方法示例,需要的朋友可以参考下

复制代码 代码如下:

#include<iostream>

using namespace std;

void init();
void function(int m);
int canplace(int row,int col,int c);
void outputresult();

int a[9][9], maxm = 0;

int main()

 init();
 function(0);
 return 0;
}
void init()
{
 int i, j;
 for(i = 0; i < 9; i++)
 {
  for(j = 0; j < 9; j++)
  {
   cin >> a[i][j];
  }
 }
}
void function(int m)
{
 int i, j, row, col;
 if (m >= 81)
 {
  outputresult();
 }
 else
 {
  row = m / 9;
  col = m % 9;
  if(a[row][col] != 0)
  {
   function(m+1);
  }
  for(i = 1; i <= 9; i++)
  {
   if(canplace(row,col,i) == 1)
   {
    a[row][col] = i;
    function(m + 1);
    a[row][col] = 0;
   }
  }

 }
}
int canplace(int row,int col,int c)
{
 int i, j;
 int flag = 1;

 for(i = 0; i < 9; i++ )
 {
  if(a[row][i] == c || a[i][col] == c)
  {
   flag = 0;
   break;
  }
 }
 if(flag != 0)
 {
  for(i = (row / 3) * 3; i < (row / 3) * 3 + 3; i++)
  {
   for(j = (col / 3) * 3; j < (col / 3) * 3 + 3; j++)
   {
    if(a[i][j] == c)
    {
     flag = 0;
     break;
    }
   }
   if(flag == 0)
   {
    break;
   }
  }
 }
 return flag;
}
void outputresult()
{
 int i, j;

 for(i = 0; i < 9; i++)
 {
  if(i % 3 == 0)
  {
   cout << endl;
  }
  for(j = 0; j < 9; j++)
  {
   if(j % 3 == 0)
   {
    cout << " ";
   }
   cout << a[i][j] << " ";
  }
  cout << endl;
 }
 cout << endl;
}

相关文章

  • 详解C++ 多态的两种形式(静态、动态)

    详解C++ 多态的两种形式(静态、动态)

    这篇文章主要介绍了C++ 多态的两种形式,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下
    2020-08-08
  • c++基础语法:构造函数与析构函数

    c++基础语法:构造函数与析构函数

    构造函数用来构造一个对象,主要完成一些初始化工作,如果类中不提供构造函数,编译器会默认的提供一个默认构造函数(参数为空的构造函数就是默认构造函数) ;析构函数是隐式调用的,delete对象时候会自动调用完成对象的清理工作
    2013-09-09
  • C语言进阶教程之字符函数&字符串函数

    C语言进阶教程之字符函数&字符串函数

    C语言提供了丰富的字符串处理函数,可以对字符串进行输入、输出、合并、修改、比较、转换、复制、搜索等操作,下面这篇文章主要给大家介绍了关于C语言进阶教程之字符函数&字符串函数的相关资料,需要的朋友可以参考下
    2022-03-03
  • C++实现LeetCode(170.两数之和之三 - 数据结构设计)

    C++实现LeetCode(170.两数之和之三 - 数据结构设计)

    这篇文章主要介绍了C++实现LeetCode(170.两数之和之三 - 数据结构设计),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C语言递归之汉诺塔和青蛙跳台阶问题

    C语言递归之汉诺塔和青蛙跳台阶问题

    这篇文章主要介绍了C语言递归之汉诺塔问题和青蛙跳台阶问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • C ++迭代器iterator在string中使用方法介绍

    C ++迭代器iterator在string中使用方法介绍

    迭代器是一种检查容器内元素并遍历元素的数据类型。迭代器是一个变量,提供对一个容器中的对象的(间接)访问方法,并且定义了容器中对象的范围。迭代器可以指向容器中的某个元素,通过迭代器就可以对非数组(存储空间不连续)的数据结构进行遍历
    2022-10-10
  • 详解C++编程中用数组名作函数参数的方法

    详解C++编程中用数组名作函数参数的方法

    这篇文章主要介绍了详解C++编程中用数组名作函数参数的方法,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • 一文带你学会C语言中的qsort函数

    一文带你学会C语言中的qsort函数

    qsort函数是C语言的库函数,能实现对各种元素类型的比较,使用的基本思想是快速排序法,头文件是<stdlib.h>,本文不讲解具体实现原理,只对使用方法进行说明,希望对大家有所帮助
    2022-12-12
  • Windows下sentry接入C/C++程序的详细过程

    Windows下sentry接入C/C++程序的详细过程

    sentry作为一个开源的软件,发展至今,已经非常成熟。它支持的平台众多,甚至于针对不同的工作者(后台、前端、客户端)都有相应的内容,这篇文章主要介绍了Windows下sentry接入C/C++程序,需要的朋友可以参考下
    2022-09-09
  • C++Lambda表达式详解

    C++Lambda表达式详解

    这篇文章主要介绍了C++中的Lambda表达式详解,本文讲解了基本语法、Lambda的使用等内容,需要的朋友可以参考下,希望能够给你带来帮助
    2021-10-10

最新评论