• 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]
  • 相关阅读:
    运算符的优先级(从高到低)
    常用字符与ASCII代码对照表
    02.数据类型常量与变量
    Java基础01
    2以太坊入门的方法2
    区块链学习笔记1
    5关键字this与super的区别
    4Java中成员变量与局部变量
    lua返回页面时中文乱码
    struts2中<jsp:forward>跳转时报404错误的问题
  • 原文地址:https://www.cnblogs.com/bellumpara/p/8582830.html
Copyright © 2020-2023  润新知