将原始数据中的对角数据设置成0。也就是说,到原地的距离为0。
将其它不通的数据设成较大的数,如2000。
将计算选项设置为“启用迭代计算”
选中C5单元格(对角线左上方第一个待定数据),输入公式:
=MIN(INDEX($C$3:$N$14,ROW()-2,COLUMN()-1)+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()-1),INDEX($C$3:$N$14,ROW()-2,COLUMN())+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()),INDEX($C$3:$N$14,ROW()-2,COLUMN()+1)+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()+1),INDEX($C$3:$N$14,ROW()-2,COLUMN()+2)+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()+2),INDEX($C$3:$N$14,ROW()-2,COLUMN()+3)+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()+3),INDEX($C$3:$N$14,ROW()-2,COLUMN()+4)+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()+4),INDEX($C$3:$N$14,ROW()-2,COLUMN()+5)+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()+5),INDEX($C$3:$N$14,ROW()-2,COLUMN()+6)+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()+6),INDEX($C$3:$N$14,ROW()-2,COLUMN()+7)+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()+7),INDEX($C$3:$N$14,ROW()-2,COLUMN()+8)+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()+8),INDEX($C$3:$N$14,ROW()-2,COLUMN()+9)+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()+9))
公式看着挺复杂,实际上分解开很好理解。分别计算D—N列中第三行和第一行数据的和,再找出其最小值。这样写公式,是为了后面的复制粘贴方便。
解释:C5是A城到C城的距离,分别计算出A城和C城到B、D、E等城镇的距离之和,再找出它们的最小值,作为A城到C城的最小值。
将C5单元格的数值写到E3单元格中。
复制C5单元格的公式到C6,再把C6的数值写到F3中,以此类推,直到C14写到N3中。
复制C5单元格的公式到D6,并修改最后一个求和计算公式为:
INDEX($C$3:$N$14,ROW()-2,COLUMN()-3)+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()-3)
也就是将最后的两个+9,改为-3,然后重复第5、6步骤,当然,所说的步骤,是指修改D列公式,写到F4、G4......N4单元
复制D6单元格的公式到E7,并修改倒数第二个求和计算公式为:
INDEX($C$3:$N$14,ROW()-2,COLUMN()-4)+INDEX($C$3:$N$14,COLUMN()-2,COLUMN()-4)
也就是将两个+8改为-4,然后重复第5、6步骤。
一直做下去,直到完成最后右下角的一个待定数据。
图片放不上去,只好加附件了。
单源点用迪杰斯特拉(Dijkstra)算法
任意两点弗洛伊德(Floyd)算法,网上自己看,或找相关书籍。
A到L啊 我只是个非专业的 选了一个公选课 期末被坑 求大神带
2013-07-12
可以参考一下这里,不知道有没有帮助:
http://course.tju.edu.cn/tddg/practice/software/excel/excel/network/
你这个问题是下面这本书中的其中一个技巧,具体操作请购买原书P485页:
Excel数据处理与分析实战技巧精粹 Excel Home编著 人民邮电出版社 2008
附件公式齐全,但过程需要参考原书的
广告 您可能关注的内容 |