易语言求最大不下降序列解决航线设置

程序集变量

这里友好城市数组采用了二维数组。

.版本 2
 
.程序集 启动窗口程序集
.程序集变量 友好城市数组, 整数型, , "5,4", 存放所有友好城市代码
.程序集变量 友好城市对数, 整数型, , , 存放所有友好城市对数
.程序集变量 最大航线条数, 整数型, , , 存放最大的航线条数

计算执行

.版本 2
 
.子程序 _计算图形按钮_被单击
.局部变量 循环变量1, 整数型
.局部变量 循环变量2, 整数型
.局部变量 本城市航线条数, 整数型, , , 存放当前城市的般线条数
.局部变量 下条航线城市, 整数型, , , 存放当前城市的下条般线到达的城市代码
.局部变量 城市代码, 整数型, , , 存放城市代码
 
' 将程序集变量置0
最大航线条数 = 0
友好城市对数 = 0
.变量循环首 (1, 5, 1, 循环变量1)
    友好城市数组 [循环变量1] [1] = 0
    友好城市数组 [循环变量1] [2] = 0
    友好城市数组 [循环变量1] [3] = 0
    友好城市数组 [循环变量1] [4] = 0
.变量循环尾 ()
' 以下为初始化代码
' 设置友好城市对数为5
友好城市对数 = 5
' 将最大航线条数置0
最大航线条数 = 0
' 设置友好城市代码
.变量循环首 (1, 取数组下标 (友好城市数组, ), 1, 循环变量1)
    ' 设置两个对应友好城市的代码
    友好城市数组 [循环变量1] [1] = 循环变量1 × 2
    友好城市数组 [循环变量1] [2] = 循环变量1 × 21
    ' 表示可以设置的航线条数
    友好城市数组 [循环变量1] [3] = 1
    ' 表示后继,即下一条航线从哪里开始设置,为0表示不能设置下一条航线
    友好城市数组 [循环变量1] [4]0
.变量循环尾 ()
 
' 从倒数第二个城市开始规划
.变量循环首 (友好城市对数 - 1, 1, -1, 循环变量1)
    ' “本城市航线条数”表示本城市后面可以设置的航线数,“下条航线城市”表示下条航线从哪个城市开始
    本城市航线条数 = 0
    下条航线城市 = 0
    .变量循环首 (循环变量11, 友好城市对数, 1, 循环变量2)
        ' 如果本城市“循环变量1”的终点小于后面城市的终点(即不相交),并且此城市后面可以设置的航线数大于“本城市航线条数”
        .如果真 (友好城市数组 [循环变量1] [2] > 本城市航线条数)
            ' 如果上面条件成立,那么“本城市航线条数”等于城市“循环变量2”的可以设置航线数
            本城市航线条数 = 友好城市数组 [循环变量2] [3]
            ' 如果上面条件成立,“下条航线城市”等于可以设置下条航线的城市代码
            下条航线城市 = 循环变量2
            ' 如果本城市后面总共可以设置的航线数>0
        .如果真结束
        .如果真 (本城市航线条数 > 0)
            ' 如果本城市后面总共可以设置的航线数>0,则本城市可以设置的航线数在下个城市可以设置航线数的基础上加1
            友好城市数组 [循环变量2] [3] = 本城市航线条数 + 1
            ' 如果本城市后面总共可以设置的航线数>0,则“友好城市[循环变量2][]”等于本城市后续城市的代码
            友好城市数组 [循环变量2] [4] = 下条航线城市
        .如果真结束
 
    .变量循环尾 ()
.变量循环尾 ()
' “最大航线条数”为可以设置最大航线数,假设初值为第一个城市可以设置的航线数
最大航线条数 = 友好城市数组 [1] [3]
' “城市代码”为城市代码,初值为第一个城市
城市代码 = 1
' 找出可以设置航线的最大值,赋值给“最大航线条数”,同时“城市代码”记下哪个可以设置最大航线数的城市代码
.变量循环首 (2, 友好城市对数, 1, 循环变量1)
    .如果真 (友好城市数组 [循环变量1] [3] > 最大航线条数)
        最大航线条数 = 友好城市数组 [循环变量1] [3]
        城市代码 = 循环变量1
    .如果真结束
 
.变量循环尾 ()
' 显示结果,因为有可能有多种方案,所以只要哪个城市可以设置的航线数等于最大值“最大航线条数”就显示结果
.变量循环首 (1, 友好城市对数, 1, 循环变量2)
    .如果真 (友好城市数组 [循环变量2] [3] = 最大航线条数)
        显示结果 (循环变量2)
    .如果真结束
 
.变量循环尾 ()

显示结果

.版本 2
 
.子程序 显示结果, , , 将结果显示出来
.参数 城市值, 整数型
 
显示结果画板.滚动写行 (“最多可设置的航线数是: ” + 到文本 (最大航线条数))
.循环判断首 ()
    ' 输出可以设置航线的友好城市代码
    显示结果画板.滚动写行 (“友好城市代码: ” + 到文本 (友好城市数组 [城市值] [1]) + “,” + 到文本 (友好城市数组 [城市值] [2]))
    城市值 = 友好城市数组 [城市值] [4]
.循环判断尾 (城市值 = 0)

发布日期:

所属分类: 易语言 标签: