首先,来到这里的人应该都知道数独是什么。
那么,如果没有c++,你,在面对数独时会怎么做?
1.纯方法
1.摒除法:用数字去找单元内唯一可填空格,称为摒除法,数字可填唯一空格称为摒余解(隐性唯一解)。
就是通过某一个格子所在行与列和宫,确定当前格子上的数:
1 | 3 | 4 | ||||||
5(x) | 5(x) | 5(x) | 5 | |||||
5(x) | 5(x) | 5 | ||||||
5 | 5 | |||||||
根据已知三个“5”,排除一宫8个格子,得到“5”的掘除法
#ifndef SHUDUFA_H
#define SHUDUFA_H//定义头文件
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> P; P ji[11];
int kuai[11][11],lie[11][11],hang[11][11],ma[11][11],k,mm[11][11];
inline int d(int pd,int x,int y) {if(pd==1) return x; else return y;}
inline int find(int num)
{
int jinum=0;
for(int i=1;i<=9;i++) for(int j=1;j<=9;j++) if(ma[i][j]==num) ji[++jinum]=P(i,j);
return jinum;
}//find(i)表示寻找数独上所有i数字的坐标并存于ji[i]中。
inline void biao_hui(int p,int x,int y,int val,int howk)
{
hang[x][val]=p;
lie[y][val]=p;
kuai[howk][val]=p;
mm[x][y]=1;
ma[x][y]=p*val;
k+=2*p-1;
}//biao_hui(p,x,y,val,howk)表示将数独第(x,y)个格子填入val且仅当p=1,标记(p=0时为回溯)
inline void does(int i1,int i2,int j1,int j2,int temp[11][11],int num,int howk)
{
int sum=0,x,y;
for(int i=i1;i<=i2;i++)
{
for(int