圖的遍歷演算法-七巧板塗色
有如圖所示的七巧板,試設計演算法,使用至多4種不同的顏色對七巧板進行塗色(每塊塗一種顏色),要求相鄰區域的顏色互不相同,列印輸出所有可能的塗色方案。
演算法設計:
1、使用鄰接矩陣表示七巧板的相鄰情況
2、使用蠻力法進行搜尋
最終結果:
程式碼:
#include <iostream>
using namespace std;
//三角板個數
const int n=7;
//鄰接矩陣表,用來判斷是否相鄰
const int data[n][n] =
{
{0,1,0,0,1,0,1},
{1,0,0,1,0,1,0},
{0,0,0,0,1,0,1},
{0,1,1,0,0,1,1},
{1,0,0,0,0,0,1},
{0,1,0,1,0,0,0},
{1,0,1,1,1,0,0}
};
//每個三角板的顏色
int color[n]= {0,0,0,0,0,0,0};
static int total;
void tryFind(int s);//查詢塗色方案的遞迴
int colorSame(int s);//判斷與周圍的三角板顏色是否相同
void output();//輸出塗色方案
int main()
{
total=0;
tryFind(0);
cout<<"Total= "<<total<<endl;
return 0;
}
void tryFind(int s)
{
//s=0~6,如果s=7說明已經塗完
if(s==n)
output();
else
{
//1、2、3、4代表四種顏色
//只有與周圍三角塊的顏色不同時才會進入下一個三角板的塗色
for(int i=1; i<=4; i++)
{
color[s]=i;
if(colorSame(s)==0)
tryFind(s+1);
}
}
}
int colorSame(int s)
{
int flag=0;
for(int i=0; i<s; i++)
{
//使用鄰接矩陣判斷是否相鄰
//如果相鄰判斷顏色是否相同
if(data[i][s]==1 && color[i]==color[s])
flag=1;
}
return flag;
}
void output()
{
cout<<"serial number: ";
for(int i=0; i<n; i++)
{
cout<<color[i]<<" ";
}
total++;
cout<<endl;
}
相關文章
- 圖的遍歷演算法-馬遍歷棋盤演算法
- 圖論演算法遍歷基礎圖論演算法
- 《啊哈!演算法》第5章 圖的遍歷演算法
- 《圖論》——廣度優先遍歷演算法(BFS)圖論演算法
- 演算法競賽——樹和圖的儲存與遍歷演算法
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- Python演算法:遍歷Python演算法
- 資料結構與演算法——二叉樹的前序遍歷,中序遍歷,後序遍歷資料結構演算法二叉樹
- 演算法與資料結構之圖的表示與遍歷演算法資料結構
- js的map遍歷和array遍歷JS
- 二叉樹的遍歷演算法【和森林的遍歷】【PHP 原始碼測試】二叉樹演算法PHP原始碼
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- jQuery遍歷函式,javascript中的each遍歷jQuery函式JavaScript
- 廣度優先遍歷圖解圖解
- 圖論系列之「基於深度優先遍歷的尋路演算法 (Path) 」圖論演算法
- 二叉樹的遍歷及常用演算法二叉樹演算法
- jQuery的遍歷結構設計之遍歷同胞jQuery
- jQuery的遍歷結構設計之遍歷祖先jQuery
- 從JS遍歷DOM樹學演算法JS演算法
- 圖的儲存與遍歷C++實現C++
- 二叉樹的廣度遍歷和深度遍歷()二叉樹
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹
- 程式碼隨想錄演算法訓練營,9月9日 | 二叉樹遞迴遍歷,迭代遍歷,層序遍歷演算法二叉樹遞迴
- JS中的遍歷JS
- DOM元素的遍歷
- JavaScript 中的遍歷JavaScript
- 樹的遍歷方式
- Collection集合的遍歷
- JS 物件的遍歷JS物件
- 【經典演算法問題】馬的遍歷【回溯】演算法
- 喂,不是吧!一遍弄懂樹、圖的遍歷操作------入門級
- jQuery 遍歷jQuery
- 遍歷 FlowDocument
- python 圖 自身遍歷及弱引用使用Python
- 資料結構實驗之圖論二:圖的深度遍歷資料結構圖論
- Javascript樹(一):廣度遍歷和深度遍歷JavaScript
- 二叉樹的後序遍歷post order演算法二叉樹演算法
- 演算法線索二叉樹的建立和遍歷演算法二叉樹