现有n种不同形状的宝石,每种宝石有足够多颗。欲将这些宝石排列成m行n列的一个矩阵,m<=n,使矩阵中每一行和每一列的宝石都没有相同的形状。试设计一个算法,计算出对于给定的m和n,有多少种不同的宝石排列方案。
分析:
共有n中形状的宝石,排成m行n列,每一行和每一列的宝石都没有相同的形状,即每行都有n种宝石,只需将n种宝石全排列,判断每一列是否有相同形状的宝石即可。
#include<stdio.h>
#define n 3
#define m 3
int a[m][n];
int count=0;
//判断数组的每行每列是否有重复的数,如果有,返回false;否则,返回true
bool ok(int x,int y){
for(int i=0;i<x;i++)
if(a