全球旧事资料 分类
dexite
dforijto
dobegi
tajajaiait③taj④e
de
dbegi
writel
E
try
kk
cou
t0fori1to
doaii⑤e
d
read
k
【答案】①jk(或kj)②p1tok③perm2j1④ajaiait⑤perm21
10
f马鞍山二中
NOIP20062008初赛(提高组)试题&解析
2.(TSP问题的交叉算子)TSP问题Traveli
gSalesma
Problem描述如下:给定
个城市,构成一个完全图,任何两城市之间都有一个代价(例如路程、旅费等),现要构造遍历所有城市的环路,每个城市恰好经过一次,求使总代价达到最小的一条环路。遗传算法是求解该问题的一个很有效的近似算法。在该算法中,一个个体为一条环路,其编码方法之一是1到

个数字的一个排列,每个数字为一个城市的编号。例如当
5时,4215”表示该方案实施的路线为342153。遗传算法的核心是通过“3两个个体的交叉操作,产生两个新的个体。下面的程序给出了最简单的一种交叉算法。具体过程如下:1选定中间一段作为互换段,该段的起止下标为t1,t2,随机生成t1,t2后,互换两段。2互换后,在每个新的排列中可能有重复数字,因而不能作为新个体的编码,一般再做两步处理:21将两个互换段中,共同的数字标记为0,表示已处理完。22将两个互换段中其余数字标记为1,按顺序将互换段外重复的数字进行替换。例如:
12,两个个体分别是:a1135426791012811a2321126710118549t15,t28。上述每一行中,两个星号间的部分为互换段。假定数组的下标从1开始,互换后有:a113546710111012811a23211226798549然后,将数字67对应的项标记为0,星号内数字291011对应的项标记为1,并且按顺序对应关系为102,119。于是,将a1910替换为a192,将a222替换为a2210,类似再做第2组替换。这样处理后,就得到了两个新个体:a1135467101121289985411
a2310112267
(3)输出两个新个体的编码。程序:programex502typearr1array120ofi
teger
11
f马鞍山二中
NOIP20062008初赛(提高组)试题&解析
vara1a2kz1kz2arr1
kt1t2i
tegerfu
ctio
ra
d1ki
tegeri
tegervarti
tegerbegi
t0whilet2ortkdotra
domk12ra
d1te
dprocedureread1varaarr1mi
teger读入数组元素a1至am,a00,略。procedurewrt1varaarr1mi
teger输出数组元素a1至am,略。procedurecrossvara1a2arr1t1t2
i
tegervarijtkji
tegerbegi
forit1tot2dobegi
ta1i①e
dfori1to
doifit1orit2the
begi
kz1i1kz2ir
好听全球资料 返回顶部