在N行N列的数阵中, 数K(1〈=K〈=N)在每行和每列中出现且仅 出现一次,这样的数阵叫N阶拉丁方阵。例如下图就是一个五阶拉丁方阵。 编一程序,从键盘输入N值后,打印出所有不同的N阶拉丁方阵,并统计个数。 1 2 3 4 5 2 3 4 5 1 3 4 5 1 2 4 5 1 2 3 5 1 2 3 4使用C语言编写
时间: 2023-05-23 19:03:35 浏览: 79
C语言实例 拉丁方阵
以下为C语言编写的程序:
#include <stdio.h>
#include <stdlib.h>
#define MAXN 10
int n, cnt;
int a[MAXN][MAXN] = {0};
int usedRow[MAXN] = {0};
int usedCol[MAXN] = {0};
void printMatrix() {
printf("Latin square: \n");
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("\n");
}
void dfs(int curRow, int curCol) {
if(curRow == n+1) {
cnt++;
printMatrix();
return;
}
if(curCol > n) {
dfs(curRow+1, 1);
return;
}
for(int i=1; i<=n; i++) {
if(!usedRow[curRow] && !usedCol[curCol]) {
usedRow[curRow] = 1;
usedCol[curCol] = 1;
a[curRow][curCol] = i;
dfs(curRow, curCol+1);
a[curRow][curCol] = 0;
usedRow[curRow] = 0;
usedCol[curCol] = 0;
}
}
}
int main() {
printf("Please input n: ");
scanf("%d", &n);
dfs(1, 1);
printf("There are %d different latin squares.\n", cnt);
return 0;
}
阅读全文