#include
#include
#include
using
namespace
std;
const
int max = 50;
int n, m, k;
int times[max]; //每種寶石的重複次數
int id[max]; //每個寶石的價值序號
int board[max][max]; //寶石矩陣
//考察當前列寶石數是否多於應出現的次數
bool ok(int r, int c, int s)
double num = 0; //不同的寶石排列方案數
//從上到下,從左到右遞迴搜尋,即先行後列
void backtrack(int r, int c)
else
backtrack(r+1, 2); //考察下一行
}else
backtrack(r, c+1); //考察下一列
swap(board[r][c], board[r][i]);
}
}int main()
}int j;
for(i=1; i<=m; i++) //初始化為單位矩陣
for(j=1; j<=n; j++)
board[i][j] = id[j];
backtrack(2, 2);
cout
<< "\n不同的寶石排列方案數為:"
書上的正確答案為 84309,不知錯在**
拉丁矩陣問題
問題描述 現有n種不同形狀的寶石,每種寶石有足夠多顆。欲將這些寶石排列成m行n列的乙個矩陣,m n,使矩陣中每一行和每一列的寶石都沒有相同形狀。試設計乙個演算法,計算出對於給定的m和n,有多少種不同的寶石排列方案。演算法設計 對於給定的m和n,計算出不同的寶石排列方案數。資料輸入 第一行有2個正整數...
拉丁矩陣問題
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...