
思路:
1、把灯管的连接转为图结构,相邻的灯管即认为有边。
2、用深度搜索,去计算有多少种不同字符。
3、因为有每种字符都会重复算两遍,最后的结果需要除以2。
- #include
- using namespace std;
- int graph[7][7] = {//转化成图
- {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) //本灯管亮后可能构成几种字符=下一根灯管亮+其连通分支的数量
- {
- 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;
- }