資源簡介
拉丁矩陣C語言算法和報告,包含C語言代碼,主要為遞歸回溯算法,詳細包含注釋

代碼片段和文件信息
#include
#include
#include
using?namespace?std;
const?int?MAX?=?50;
int?n?m;
int?board[MAX][MAX];
//考察當前列是否有相同形狀的寶石
//如果有,返回false;否則,返回true
bool?ok(int?r?int?c?int?k)
{
????for(int?i=1;?i ????{
????????if(board[i][c]?==?k)?//判斷當前列是否有相同形狀的寶石
????????????return?false;
????}
????return?true;
}
long?int?num?=?0;??
//不同的寶石排列方案數
//從上到下,從左到右遞歸搜索,即先行后列
void?backtrack(int?r?int?c)
{
????for(int?i=c;?i<=n;?i++)??//列
????{
????????if(ok(r?c?board[r][i]))??//考察當前列是否有相同形狀的寶石
????????{
????????????swap(board[r][c]?board[r][i]);?//交換列
????????????if(c?==?n)??//如果列考察完畢
????????????{
????????????????if(r?==?m)?//如果行考察完畢
????????????????{
????????????????????num++; //方案數+1
????????????????????return;
????????????????}
????????????????else
????????????????????backtrack(r+1?1);?//考察下一行
????????????}
????????????else
????????????????backtrack(r?c+1);?//考察下一列
????????????swap(board[r][c]?board[r][i]); //交換列
????????}???
????}
}
int?main()
{
????ifstream?fin(“input.txt“);
????ofstream?fout(“output.txt“);
????fin?>>?m;?
????fin?>>?n;
????int?i?j;
????for(i=1;?i<=m;?i++)
????????for(j=1;?j<=n;?j++)
????????????board[i][j]?=?j;
????backtrack(1?1);
????fout<????fout<????cout?<“顯示結果在output.txt中“?<????return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????????3??2019-06-09?12:47??拉丁矩陣C語言算法和報告\input.txt
?????文件???????????6??2019-06-12?23:32??拉丁矩陣C語言算法和報告\output.txt
?????文件??????536064??2019-06-27?12:17??拉丁矩陣C語言算法和報告\實驗報告.doc
?????文件????????1481??2019-06-09?12:47??拉丁矩陣C語言算法和報告\拉丁矩陣.cpp
?????文件??????278528??2019-06-12?23:32??拉丁矩陣C語言算法和報告\拉丁矩陣.exe
?????文件????????6269??2019-06-12?23:32??拉丁矩陣C語言算法和報告\拉丁矩陣.o
?????目錄???????????0??2019-06-27?12:17??拉丁矩陣C語言算法和報告\
- 上一篇:C語言編寫學生信息管理系統(tǒng)
- 下一篇:圖的鄰接矩陣和鄰接表表示
評論
共有 條評論