國內(nèi)頂尖小程序開發(fā)公司廣州seo排名收費
?思路:
1、把燈管的連接轉(zhuǎn)為圖結(jié)構(gòu),相鄰的燈管即認為有邊。
2、用深度搜索,去計算有多少種不同字符。
3、因為有每種字符都會重復(fù)算兩遍,最后的結(jié)果需要數(shù)以2。
#include <iostream>
using namespace std;int graph[7][7] = {//轉(zhuǎn)化成圖{1,1,0,0,0,1,0},{1,1,1,0,0,0,1},{0,1,1,1,0,0,1},{0,0,1,1,1,0,0},{0,0,0,1,1,1,1},{1,0,0,0,1,1,1},{0,1,1,0,1,1,1}};
int book[7] = { 0 };//記錄燈管是否被點亮
int dfs(int n, int i) //本燈管亮后可能構(gòu)成幾種字符=下一根燈管亮+其連通分支的數(shù)量
{int sum = 1;for (int k = 0; k < n; k++){if (graph[i][k] == 1 && book[k] == 0){book[k] = 1;sum+=dfs(7, k);book[k] = 0;}}return sum;
}
int main()
{cout << dfs(7, 0) / 2;return 0;
}