题目描述
构造 N*N 阶的拉丁方阵(2<=N<=9),使方阵中的每一行和每一列中数字1到N只出现一次。如N=3时: 1 2 3 2 3 1 3 1 2
输入
n。
输出
输出对应的拉丁矩阵,每两个数字之间间隔一个空格,每输出n个数后换行。
样例输入
3
样例输出
1 2 3 2 3 1 3 1 2
#include<iostream>
using namespace std;
int store[20][20]={0},vs[10][10]={0},n;
int total,f=false;
bool pan1(int x)//判断行是否循环
{
int m;
for(int i=0;i<n;i++)
if(store[x][i]==1)m=i;
for(int i=0;i<n;i++)
{
if(store[x][(m+i)%n]!=i+1)
return false;
}
return true;
}
bool pan2(int y)//判断列是否循环
{
int m;
for(int i=0;i<n;i++)
if(store[i][y]==1)m=i;
for(int i=0;i<n;i++)
{
if(store[(m+i)%n][y]!=i+1)
return false;
}
return true;
}
bool judge(int x,int y,int key)
{
int