码迷,mamicode.com
首页 > 其他好文 > 详细

N个扇形M种颜色

时间:2018-03-16 17:22:12      阅读:970      评论:0      收藏:0      [点我收藏+]

标签:第一个   现在   style   递归   需要   例子   因此   lis   颜色   

题:

将一个圆形等分成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 与第一个不一样

 1 def cal(n, m):
 2     res = {}
 3     res[n] = 0
 4     def calsub(n, m, j):
 5         if j == n-1:
 6             for i in range(m):
 7                 if i != list_n[j-1] and i != list_n[0]:
 8                     res[n] += 1
 9             return 
10         else:
11             t = j  #因为深度优先,所以j到后面会发生变化,因此用中间变量t保存当前扇形index
12             for i in range(m):
13                 if i != list_n[t-1]:
14                     list_n[t] = i
15                     j = t
16                     j += 1
17                     calsub(n,m,j)
18                    
19     if n == 1:
20         return m
21     list_n = list(range(n))
22     for i in range(m):
23         list_n[0] = i
24         calsub(n, m, 1)
25     return res[n]

 

N个扇形M种颜色

标签:第一个   现在   style   递归   需要   例子   因此   lis   颜色   

原文地址:https://www.cnblogs.com/bellumpara/p/8582830.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!