zoukankan      html  css  js  c++  java
  • N个扇形M种颜色

    题:

    将一个圆形等分成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]
  • 相关阅读:
    php大力力 [048节] php一点支付开发资料,很散
    php大力力 [047节] 寻找程序员的方法和应用
    ECharts的简单使用
    xlsxwriter新建Excel文件-制图
    xlsxwriter新建Excel文件
    xlrd读取Excel文件
    抽奖概率互斥算法
    Redis 的 8 大数据类型!
    Django Web框架入门-博客(更新完成)
    Git学习
  • 原文地址:https://www.cnblogs.com/bellumpara/p/8582830.html
Copyright © 2011-2022 走看看