題:
將乙個圓形等分成n個小扇形,將這些扇形標記為1,2,3,...,n,現在使用m種顏色對其塗色,要求相鄰兩個扇形顏色不相同。求:有多少種塗色方法?
備註:1. 不考慮數值越界情況;
2. n >= 1, m >= 3;
3. 乙個例子; 如果n=3, m=3時,一共有6種塗法
兩種方法:
①數學公式法
我所搜到的基本都是這種方法
②遞迴自己寫的
分為三步:
1. 明確邊界
n個扇形,即長度為n的陣列,當為第乙個時,任意塗色,當為第n個時,停下,判斷
2. 判斷條件
當為第乙個時,不需要判斷
當為2...n-1個時,與前乙個不一樣
當為第n個時,與前乙個不一樣 and 與第乙個不一樣
1defcal(n, m):
2 res ={}
3 res[n] =0
4def
calsub(n, m, j):
5if j == n-1:
6for i in
range(m):
7if i != list_n[j-1] and i !=list_n[0]:
8 res[n] += 1
9return
10else
:11 t =j #因為深度優先,所以j到後面會發生變化,因此用中間變數t儲存當前扇形index
12for i in
range(m):
13if i != list_n[t-1]:
14 list_n[t] =i
15 j =t
16 j += 1
17calsub(n,m,j)
1819
if n == 1:
20return
m21 list_n =list(range(n))
22for i in
range(m):
23 list_n[0] =i
24 calsub(n, m, 1)
25return res[n]
m個珠子共n種顏色,找出包含n種顏色的最短連續片段
原題目 題目分析 一 暴力搜尋 1 最簡單的方法 暴力搜尋,逐個掃瞄第i個位置開始包含n中顏色最短區間,時間複雜度為o m 2 2 從i開始掃瞄,每出現一種新的顏色,計數 1 當計數 n時候,結束,此時即為i開始的最短區間 二 1 掃瞄一遍陣列m,計算出每種顏色在陣列m中下一次出現的位置,存在資料n...
染色問題(n個格仔,3種顏色)
有排成一行的 個方格,用紅 red 粉 pink 綠 green 三色塗每個格仔,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色 求全部的滿足要求的塗法.遞推公式 a1 3 a2 6 a 3,2 6 a3 6 a 3,3 6 an 2 a n 2 a n 1 n 4 證明 考慮第n 1個...
染色問題 n個格仔,3種顏色
有排成一行的 個方格,用紅 red 粉 pink 綠 green 三色塗每個格仔,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色 求全部的滿足要求的塗法.遞推公式 a1 3 a2 6 a 3,2 6 a3 6 a 3,3 6 an 2 a n 2 a n 1 n 4 證明 考慮第n 1個...