回溯法解决Latin方格(每个数在每行每列只出现一次)

回溯法解决Latin方格(每个数在每行每列只出现一次)_第1张图片

填入每一个数都是一层递归

使用k来把每一个数的二维数组坐标求出来:

    int row=(k-1)/n;
    int col=(k-1)%n;

完整代码: 

#include
using namespace std;
const int N=1010;
int A[N][N],t[N];
int n,cnt;
bool judge(int row,int col)
{
    int t=A[row][col];
    //检查同一行有没有和它相等的值
    for(int j=0;j>n;

    solve(1);

    printf("共有%d组解\n",cnt);

    return 0;
}

运行结果(n=4,仅展示部分):

回溯法解决Latin方格(每个数在每行每列只出现一次)_第2张图片

你可能感兴趣的:(算法,c++,数据结构)