問題描述:
現有n種不同形狀的寶石,每種寶石有足夠多顆。欲將這些寶石排列成m行n列的乙個矩陣,m<=n,使矩陣中每一行和每一列的寶石都沒有相同形狀。試設計乙個演算法,計算出對於給定的m和n,有多少種不同的寶石排列方案。
演算法設計:
對於給定的m和n,計算出不同的寶石排列方案數。
資料輸入:
第一行有2個正整數m和n,0<9。
結果輸出:
將計算出的寶石排列方案數輸出。
分析:
標準拉丁矩陣:寶石矩陣的第一行從左到右排列為1,2,3.....n,且第一列從上到下排列為1,2,3....m的陣列。
設m行n列的標準拉丁矩陣個數為l(m,n)。一般情況下,m行n列的拉丁矩陣個數為r(m,n).本題要求r(m,n)。
公式:r(m,n)=n!(n-1)!l(m,n)/(n-m)!
具體**:
#include#includeint num[10][10];
int m,n;
int count=0;
void swap(int *num1,int *num2)
int yes(int r,int c,int k)
void backtrack(int r,int c)
else
}else
swap(&num[r][c],&num[r][i]);}}
}int main()
拉丁矩陣問題
include include include using namespace std const int max 50 int n,m int board max max 考察當前列是否有相同形狀的寶石 bool ok int r,int c,int k return true long int ...
拉丁矩陣問題
問題描述 現有n 種不同形狀的寶石,每種寶石有足夠多顆。將這些寶石排列成m行n 列的乙個矩陣,m n,使矩陣中每一行和每一列的寶石都沒有相同形狀。設計乙個演算法,計算出對於給定的m和n,有多少種不同的寶石排列方案。程式設計任務 對於給定的m和n,計算出不同的寶石排列方案數。資料輸入 input.tx...
拉丁矩陣問題
拉丁矩陣問題現有 n種不同形狀的寶石,每種寶石有足夠多顆。欲將這些寶石排列成m行 n列的乙個矩陣,m n 使矩陣中每一行和每一列的寶石都沒有相同的形狀。試設計乙個演算法,計算出對於給定的m和 n,有多少種不同的寶石排列方案。輸入 3 3 輸出 12 解 拉丁矩陣問題 首先給矩陣進行賦值,每一行賦值都...