易语言回溯法数字全排列

511遇见

程序集变量

.版本 2
 
.程序集 启动窗口程序集
.程序集变量 数字数组, 整数型, , "9", 存放从1开始到输入的数字之间的所有数字
.程序集变量 排列方案个数, 整数型, , , 存放找到的排列方案个数
.程序集变量 长度, 整数型, , , 存放数字排列的长度
.程序集变量 输入的数字, 整数型, , , 存放从键盘输入的数字

窗口创建完毕初始化变量

  1. .版本 2
  2.  
  3. .子程序 __启动窗口_创建完毕
  4.  
  5. ' 初始化,将排列方案个数和长度两个变量清0
  6. 排列方案个数 = 0
  7. 长度 = 0

寻找排列方案

.版本 2
 
.子程序 找排列方案, , , 寻找排列方案
.参数 数字参数, 整数型
.局部变量 循环变量1
.局部变量 循环变量2
.局部变量 全排列, 文本型, , , 存放一个全排列
 
' 将"全排列"变量清空
全排列 = “”
.变量循环首 (1, 输入的数字, 1, 循环变量1)
    .如果真 (判断数字 (循环变量1, 数字参数) = 真)
        ' 判断为真,则能够赋值,且长度加1
        数字数组 [数字参数] = 循环变量1
        长度 = 长度 + 1
        ' 如果长度达到输入的数字大小,则表示一种组合已经完成,输出结果,相反则继续查找
        .如果 (长度 = 输入的数字)
            ' 显示方案
            .变量循环首 (1, 输入的数字, 1, 循环变量2)
                全排列 = 全排列 + 到文本 (数字数组 [循环变量2])
            .变量循环尾 ()
            显示结果框.加入项目 (全排列, )
            ' 找到了一个方案,则方案个数加1
            排列方案个数 = 排列方案个数 + 1
        .否则
            找排列方案 (数字参数 + 1)
        .如果结束
        ' 递归的时候一定要把长度减1
        长度 = 长度 - 1
    .如果真结束
 
.变量循环尾 ()
显示个数编辑框.内容 = 到文本 (排列方案个数)

判断数字

窗口放置一个编辑框,输入个数,一个显示方案个数,一个显示结果。

.版本 2
 
.子程序 判断数字, 逻辑型, , 判断当前数字是否能赋值给当前数组元素
.参数 当前数字, 整数型, , 存放当前数字
.参数 当前数组值, 整数型, , 存放当前数组的最大成员数
.局部变量 循环变量, 整数型
 
' 依次判断当前数字是否和数字数组中已经存在的数字相同
.变量循环首 (1, 当前数组值 - 1, 1, 循环变量)
    ' 如果发现数字相同,则返回一个假值
    .如果真 (数字数组 [循环变量] = 当前数字)
        返回 ()
    .如果真结束
 
.变量循环尾 ()
' 找遍后没有发现有相同数字,则返回真
返回 (真)

执行算法

.版本 2
 
.子程序 _计算图形按钮_被单击
.局部变量 询问返回, 整数型
 
' 接收在输入数字编辑框中输入的数字,并且这个数字只能在1-9之间
.如果 (到数值 (输入数字编辑框.内容) ≥ 1 且 到数值 (输入数字编辑框.内容) ≤ 9)
    .如果真 (到数值 (输入数字编辑框.内容) > 6)
        询问返回 = 信息框 (“您输入的数值过大,处理数据时程序将会有一段时间无响应,是否继续?”, #是否钮 + #询问图标, “请问:”)
        .如果真 (询问返回 = #否钮)
            返回 ()
        .如果真结束
 
    .如果真结束
    显示结果框.清空 ()  ' 将“显示结果框”清空
    输入的数字 = 到数值 (输入数字编辑框.内容)
 
    ' 开始找方案,从1开始
    找排列方案 (1)
    ' 如果输入的数字不在1-9之间,则给出提示信息
.否则
    信息框 (“注意:输入的数字只能在1-9之间!”, 0, )
.如果结束
排列方案个数 = 0

发布日期:

所属分类: 易语言 标签: