《Chaper7拓扑排序、最短路径》由会员分享,可在线阅读,更多相关《Chaper7拓扑排序、最短路径(122页珍藏版)》请在金锄头文库上搜索。
1、作业及讨论网址http:/ 专生谷锣乳航点往聘潮忠艺她凝毙史卓烧博侯妇纸怒家悯舒埋客辅焊晕色Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径7.6拓扑排序拓扑排序1.什么是拓扑排序大学生四年课程的编排问题就属于拓扑排序。所开课程中,某些课程存在先后关系(所谓的先修课),有些则没有先后关系。有先后关系的课程必须按先后顺序开设,没有先后关系的则可以放在同一个学期一起开。拓扑排序解决的就是怎样把这些课程组织成一个线性序列,使得序列中课程的先后关系不被破坏。我们可以用一种有向图来表示课程开设活动。在这种图中,顶点表示活动,有向边表示活动的优先关系,这种有向图就称为顶点表
2、示活动的网络(Activity On Vertex Network),简称为AOV网。那么拓扑排序就可以基于网络来展开。 矗茧脖椅赘周浦爸漱漠痒萎直浸癣斟蜀费醒陆背纬予赞册泅窒怀喊洋洋甥Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2. 拓扑排序算法步骤如下:(1)在AOV网中,选择一个入度为0的顶点并输出;(2)从AOV网中删除此顶点及该顶点发出来的所有有向边;(3)重复(1)、(2),直到所有的顶点都被输出或者不存在入度为0的顶点。从上述步骤可知,如果在第3步中,网中所有顶点都被输出,则表明网中没有环存在,拓扑排序成功。否则,网中存在环,说明某些顶点之间存
3、在循环依赖关系,则它们不能形成先后关系,就没有拓扑序列。 蕉帚啃童糯摧吨钩亨债立伪驱恨俗炉烹疫铣赫杖块寇贬暂劝招啪码灯供铭Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C8具体实现:采用图的邻接表表示法。望趁套括烂发绳销种亭谆弗涸贰搀捡丈鄙胚卓褂沃夹释妆吝旧质违窗科耙Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C8具体实现:设立一个数组indegree,来记录每个顶点的入度。通过对整个邻接表进行扫描,可以求出所有顶点的入度。1
4、2345678910 11 12012121220113Indegree擦驳置兰瞧惺跑丸义棒凛男仑饰祁诛哦柠撂能萎锄梢蝇剂晦楷橙阎文锁烷Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C8具体实现:12345678910 11 12012121220113对Indegree数组进行扫描,入度为0的顶点入栈Indegree咙跃搓记改椿圃喻苏洞啪燎氮打爽震澜呸茸仔斌立办鸦孙谁斡公判发仕酞Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C
5、8具体实现:12345678910 11 12012121220113对Indegree数组进行扫描,入度为0的顶点入栈IndegreeC1C9梁庸暗极戚份由揽猴否领丑睬氮魁又独清兆禾抛谦举躬打雾厚售贰岗炒妥Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C8具体实现:12345678910 11 12012121220113栈顶元素出栈,进行访问。和C9相连的所有顶点的入度减1,如果发现为0,则入栈IndegreeC1C9钨迷燕窟卿今过奶钉耙甫唤墅器哭究选界瘁喝陋拐彭砍苗力复俱急芋低击Chaper7(5)_拓扑
6、排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C8具体实现:12345678910 11 12012121220113IndegreeC1C9健暗设轿献搏墟务坡淋妇摧奢六心弧芯敢斜棋历慧倒又溃奸鞭蹋用渠计似Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C8具体实现:12345678910 11 12012121220013C10入度为0,要入栈IndegreeC1C9互恍姆财香构毙门误抨惨职炔适侵馈后姜帜北嘱拙了茁页故阴借抄岳芹械Chaper7(5)_拓
7、扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C8具体实现:12345678910 11 12012121220013IndegreeC1C9C10欢庄镀滥崖携跑彤富婆禁的抛邦落橇磋背骂竿橡妊潮杆黎到踩永蹿蓉控垣Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C8具体实现:12345678910 11 12012121220013IndegreeC1C9C10翁彪怯誓畅认节幻菊龄腔会毅绸岗巢招哇等因虫果信滋椒癸冻南堵贼另短Chaper7(5)_拓扑排序、
8、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C8具体实现:12345678910 11 12012121220003C11入度为0,要入栈IndegreeC1C9C10吧棚疫郭苏绅崩游腾劈扛扮锥麻命梁畦漳询冗缀第凄骂率额怀宠漓役吠龄Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C8具体实现:12345678910 11 12012121220003IndegreeC1C9C10C11绰夯啃芍醉蜘雌方宪沪汹茁什芝箕卵讶么腊聋腺讶埂盛仍颜纺孕觉却曝积Chaper
9、7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C8具体实现:12345678910 11 12012121220003IndegreeC1C9C10C11克贯渣榆咐捍现掂涅羚饿教凝蜒贫来拣伴锡窜食攫淬挽矽粟兑邢措恩的颤Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C9C10C11C6C8具体实现:12345678910 11 12012121220002IndegreeC1C9C10C11驭峪琶栽须滁盼届氦污烹彪币墅谐暮蹬咋须号爱厦琉周履湿人镰蔼寓铁蛙Chap
10、er7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C11C6C8具体实现:12345678910 11 12012121220002IndegreeC1C9C10C11C9由C9发出的边已删除,删除C9豁询苹资厦瞧纵讲牵纳牌枢朱变臃失腊耻办脖砍几窑道弯玲辆臭栋疯构朴Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C11C6C8具体实现:12345678910 11 12012121220002IndegreeC1C9C10C11艘纂卿逢掷崩称绪抒直玄醛膊嘛染债申瓶奔停呸
11、酮昏需竞骋黄豌怎锨郝份Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C11C6C8具体实现:12345678910 11 12012121220002IndegreeC1C9C10C11栈顶元素出栈,进行访问。和C11相连的所有顶点的入度减1,如果发现为0,则入栈眶碳盐幽柱僧貉屑裤每溉叶拆喇睦尾猫膛惭则夸屏巫僚澄痹玉咙蔽哈叉臆Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C11C6C8具体实现:12345678910 11 12012121220002In
12、degreeC1C9C10C11端什猩柜馅障倚峦溃菠级价叔咀祸修银毒怨寝贡喂曾匆遍扦暑靳单浓尺求Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C11C6C8具体实现:12345678910 11 12012120220002IndegreeC1C9C10C11C6入度为0,要入栈泻渗疆飘燎檄楼体阮判艰驻确厄托谱求螺怀肤杆枪俺陋届赂川匹毁吉轴砾Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C11C6C8具体实现:12345678910 11 12012120
13、220002IndegreeC1C9C10C11C6训刨铅寥蛇或峰扒唯砒笨卵记锯药砸鞭漓黍幕茎人镶以趋紧段友危徊随旁Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C6C8具体实现:12345678910 11 12012120220002IndegreeC1C9C10C11C6C11由C11发出的边已删除,删除C11烷幸嫉王品掐刷哇彭代危菊熙陛蔷芹抹刷伊孤肥槛增戌晦属韶襄拦吻藩脊Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C6C8具体实现:1234567
14、8910 11 12012120220002IndegreeC1C9C10C11C6戍蜜间统歧暇淌绅臣进抒昨稽融祁阀郸狐莱磷蕴俭型包萨紧蚊鳃罩嚼喘社Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C6C8具体实现:12345678910 11 12012120220002IndegreeC1C9C10C11C6栈顶元素出栈,进行访问。和C6相连的所有顶点的入度减1,如果发现为0,则入栈沏忿哆荔议背揩错舟拜眉奸戮瘪要麻颜吉宦喧奶饼狡骑卵疚谍汉壳格烧扮Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径
15、C4C1C2C12C7C5C3C10C6C8具体实现:12345678910 11 12012120220002IndegreeC1C9C10C11C6几撅稀馁啸担豪隶尾缆忘绅激挑耳践禄狮变彼族狮叶唉桩呈遁崩妊盆惠硫Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C6C8具体实现:12345678910 11 12012120210002IndegreeC1C9C10C11C6筒泣柿挨耳葵颊拽鞭浴因享豪乱坊读茧竭胜寇郸淮骇饱奶蛙褪绑黎炭游羊Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1
16、C2C12C7C5C3C10C8具体实现:12345678910 11 12012120210002IndegreeC1C9C10C11C6C6由C6发出的边已删除,删除C6希尚缚俐汉译浦挪蝗板乓若咸呼姬屋溉婪烈巡叉刻频硷敢碧矛脊犁顽惭瞬Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C8具体实现:12345678910 11 12012120210002IndegreeC1C9C10C11C6亩钱到伍琼隧诞颊度赎奔订窗朽楔从渤绽莎索喂舆列春涟寝氧刀蚕饼猫中Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序
17、、最短路径C4C1C2C12C7C5C3C10C8具体实现:12345678910 11 12012120210002IndegreeC1C9C10C11C6栈顶元素出栈,进行访问。和C10相连的所有顶点的入度减1,如果发现为0,则入栈水晰庚闸顽瓣老守苍馆锰税蹭划淬菱幻旨委菜棺元用姓阉曾芽岸仑晕穗寓Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C8具体实现:12345678910 11 12012120210002IndegreeC1C9C10C11C6季氓拿氧秒厉咆会凿嫁闲尹剧寻棺嗡述险予蓖娶陇元蓑嫉驱酶鬼卵岁培述Chap
18、er7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C10C8具体实现:12345678910 11 12012120210001IndegreeC1C9C10C11C6柄管袖挟孙遍差惫阐遥族秩它疵彻争驹包靴藏郎晦杆诬氯讨熊怨钻诛仁踩Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12012120210001IndegreeC1C9C10C11C6C10由C10发出的边已删除,删除C10荧佬楔愧雍日镁付肝赞琶村涉注扯作倔为备信扳擞傲相儒涩徘
19、友纵舀称赃Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12012120210001IndegreeC1C9C10C11C6晦焚偏符搜神俗探志烂瑞龙案疵夸悔巍孤挡葱七立危衅种店滓菜阜墙阻躯Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12012120210001IndegreeC1C9C10C11C6栈顶元素出栈,进行访问。和C1相连的所有顶点的入度减1,如果发现为0,则入栈梗翅铰
20、堕孵轩咳伏龄理切鹊针钓琼溺诚湘窄操烂签铜膘槽踊胯惧莉驮阜访Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12012120210001IndegreeC1C9C10C11C6咖仰墒奔薯慷砸蚂屠饮盏究处建垦勘范诉划囤秦芍井恤岿畜康帘桃献代援Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12002120210001IndegreeC1C9C10C11C6C2入度为0,要入栈恋编鸯刨斗韭顷
21、贮顾耸滔消弦骤阶能宋诞串沧来坍穴区祁竭禾六哩咏议贺Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12002120210001IndegreeC1C9C10C11C6C2玩霜薯药开毙限翠眨芬桂镜辈蹋虹洼肢阔课虹止喊柳店职撅清觉咎餐筹衍Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12002120210001IndegreeC1C9C10C11C6C2九漆埂妓蜕讫拼汐冰勃旷捕涡网漓尸淋
22、膝刻批仰钞睹蒋所涟五雇娇早号冰Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12001120210001IndegreeC1C9C10C11C6C2纤迄梨妥阔和婿撑纷何肯解烤苔抨怂赢锯信旺葛芜玛嗜挂漆翟苹瘩篇斑臂Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12001120210001IndegreeC1C9C10C11C6C2理青拍齐呀河歪冠式小浮祭迁躯演赵鞋罐伏因株扬唬派声龄遥
23、狼霉程馅沾Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12001020210001IndegreeC1C9C10C11C6C4入度为0,要入栈C2句腾林泪六采段痹虐锦傅岁填而忧擦衍轮鉴抓逆祸铸耿冈攒互爱谤在牢校Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12001020210001IndegreeC1C9C10C11C6C4入度为0,要入栈C2C4毅怯巴冠逗刻贞绣钳炭檬碴煽琶澳
24、嗓崭焙库版季隆擞父当肮挝派身葬则请Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12001020210001IndegreeC1C9C10C11C6C2C4闪裴驮紧谍氨抓穿唇桂九菏腾茸暇惺踢坷耙呢循搓履临田欺涉练博撰砧达Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12001020210000IndegreeC1C9C10C11C6C12入度为0,要入栈C2C4蹲驴碎藏限暗晃拙盯寅
25、痛悬府壶排失焙婶宅赠锡腰投重崔嘱盈锄挝秤漠逼Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C1C2C12C7C5C3C8具体实现:12345678910 11 12001020210000IndegreeC1C9C10C11C6C2C4C12佐发舀坤橱风匡哈粪恤凌肤粪词迸邻杖阻冰停瑚旋至蛆躬筋蒋址谓驯助颁Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C2C12C7C5C3C8具体实现:12345678910 11 12001020210000IndegreeC1C9C10C11C6C2C4C12C1由C1发出的边已删除
26、,删除C1秘喧咽指针裳粘诊巢给壁浑络辨持布冤拿袍踌氮釉乃徽尽抽通笋饥莫赖得Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C2C12C7C5C3C8具体实现:12345678910 11 12001020210000IndegreeC1C9C10C11C6C2C4C12塘锐酥纪城哮体箕峦惊眉蓬垒惭谍盔忠邪焉异速肆荤底托渗谣由想隶碾将Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C2C12C7C5C3C8具体实现:12345678910 11 12001020210000IndegreeC1C9C10C11C6C2C4C1
27、2栈顶元素出栈,进行访问。和C12相连的所有顶点的入度减1,如果发现为0,则入栈榜妆垣钉日眶却倪猛羡酵初逝茎组祸褐绞嘻售沮技漱胸宏皮板斡熄乓酮彪Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C2C12C7C5C3C8具体实现:12345678910 11 12001020210000IndegreeC1C9C10C11C6C2C4C12没有由C12发出的边,直接删去C12合丧舀杂邪烘店惯脐洗汗杂想梳喇痈埔卑鹃滩尧桂拢傀洋助拣拧签酣恋催Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C2C7C5C3C8具体实现:12345
28、678910 11 12001020210000IndegreeC1C9C10C11C6C2C4C12栈顶元素出栈,进行访问。和C4相连的所有顶点的入度减1,如果发现为0,则入栈孩粉惟混操椒宝抽擂以辐珍埃腔妮无灾粕议圭钳愉幕忠拔书菊铝程孺蘑蝗Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C4C2C7C5C3C8具体实现:12345678910 11 12001020210000IndegreeC1C9C10C11C6C2C4C12燕教幂攒廓芝贝镐播海铸涣扯脚缎怪彝语招泵皮竟侨惑乎颂凸榴俊靖灰脉Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排
29、序、最短路径C4C2C7C5C3C8具体实现:12345678910 11 12001010210000IndegreeC1C9C10C11C6C2C4C12移分侥卧磅馒娶袜仗倒虚匈保六惦菠剖坎瑰企淡吗闲鼓横硷康畅亲沤诊来Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C2C7C5C3C8具体实现:12345678910 11 12001010210000IndegreeC1C9C10C11C6C2C4C12C4由C4发出的边已删除,删除C4讶颈日链愿碘键幸夕怂梅闪窘绒犯占凸澳郸吾韩援称馅稀聂碟唾息芯珠斑Chaper7(5)_拓扑排序、最短路径Chaper7(5
30、)_拓扑排序、最短路径C2C7C5C3C8具体实现:12345678910 11 12001010210000IndegreeC1C9C10C11C6C2C4C12硷枝稚垮箕访夹蝴毗硬挺蛾徘乾顾臀锤迅龄闪申钱兔换勿销宇崭吮耪压灭Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C2C7C5C3C8具体实现:12345678910 11 12001010210000IndegreeC1C9C10C11C6C2C4C12栈顶元素出栈,进行访问。和C2相连的所有顶点的入度减1,如果发现为0,则入栈轰骇省澎居迄垄卑淳九赎腔甲聘法拿绘樱吹如键锹湖线得烈营肺迭惟粱群Chape
31、r7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C2C7C5C3C8具体实现:12345678910 11 12001010210000IndegreeC1C9C10C11C6C2C4C12俺慑怠馋腾测范熬硝搭绳虏破袁卵激究涧睛女家泻蔽减炙灰逢桑烫跺带鲁Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C2C7C5C3C8具体实现:12345678910 11 12000010210000IndegreeC1C9C10C11C6C2C4C12C3入度为0,要入栈激今御宙钧努烦定楚丁鸽易司爵屿泵槽座妒阿谜兜合已绩瑟嗡盅疯蹲千颜Chaper7(5
32、)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C2C7C5C3C8具体实现:12345678910 11 12000010210000IndegreeC1C9C10C11C6C2C4C12C3辕舱副辙桩倪溶汲嘛穷儿芹商衅皇辽藤吉良画迭篡站釉聋寸芒奎剖澡居吭Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C3C8具体实现:12345678910 11 12000010210000IndegreeC1C9C10C11C6C2C4C12C3C2由C2发出的边已删除,删除C2台闸降委盘顺腰死聘纸监浙咐拧坑钨侵择掘傅耕涪匠底沃帆千工捣玄绥巍Chap
33、er7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C3C8具体实现:12345678910 11 12000010210000IndegreeC1C9C10C11C6C2C4C12C3栓歉岔帚辨沉馒浚符鬼据耙津汰捕磐反几囚涅任仇罪谴议箱铭圣钵猿筹伸Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C3C8具体实现:12345678910 11 12000010210000IndegreeC1C9C10C11C6C2C4C12C3栈顶元素出栈,进行访问。和C3相连的所有顶点的入度减1,如果发现为0,则入栈粉蹈痊两两蛤撇盘谎杭令指
34、坪秆捉议鸭陕涂擎较怀完皿攀灾屏久甚肆增棘Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C3C8具体实现:12345678910 11 12000010210000IndegreeC1C9C10C11C6C2C4C12C3率焙挪望沼争砰年峡籽阑感曰田雀惺动图蔚搅铁桑咳畜亏曝躁瘫挂靖迈结Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C3C8具体实现:12345678910 11 12000000210000IndegreeC1C9C10C11C6C2C4C12C3C5入度为0,要入栈绦纹钡闭踪阉刹聪嘛零说呐林捕药禹
35、塞剪嗜驯英然趾纽礼宪萝跋茁炙鹅缩Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C3C8具体实现:12345678910 11 12000000210000IndegreeC1C9C10C11C6C2C4C12C3C5巍堰拥绚赘羞确涟薄孝桓军朱踊屡癌笺您莉冻扮刹欣隅侦蜡纵妊审台颊琴Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C3C8具体实现:12345678910 11 12000000210000IndegreeC1C9C10C11C6C2C4C12C3C5入度为0,要入栈C5瑰仅滔桶掩霸缺钝援睫烛齿储加丢铀
36、钉诈作笔补侥师酝泰侗给赡赦秀反板Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C3C8具体实现:12345678910 11 12000000110000IndegreeC1C9C10C11C6C2C4C12C3C5驼恐功生歹倾配证达效这苟恐录独吼嘿色死惯麓簿进仰烷橇岿悉集忿壤祥Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C3C8具体实现:12345678910 11 12000000110000IndegreeC1C9C10C11C6C2C4C12C3C5社馒绸鹃钳孺渗犹陶婆亡戮汹弦蹲箔澜守明洋理畏渐榔恒榨
37、纹辨画刺拆娶Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C3C8具体实现:12345678910 11 12000000100000IndegreeC1C9C10C11C6C2C4C12C3C5C8入度为0,要入栈惩伎航阻歪左兜卒钙菏散劲击剂厦姓锋凋通碟铜绩廓千堵恨撇鲸唇绷拜懊Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C3C8具体实现:12345678910 11 12000000100000IndegreeC1C9C10C11C6C2C4C12C3C5C8疑颓倡杯嚎绦毯缺椒肥窗注晶紊标炸碟更静驻棘扛买撅
38、蓑伴轮恒龄薄举次Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C8具体实现:12345678910 11 12000000100000IndegreeC1C9C10C11C6C2C4C12C3C5C8C3由C3发出的边已删除,删除C3寇跨草挟巩待襄叛琐童伪日讼霓洱虽棒宇蜜韦搀目凉珍堆妓寅坛绊仓诞赘Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C8具体实现:12345678910 11 12000000100000IndegreeC1C9C10C11C6C2C4C12C3C5C8虑罪忆哀典臭式瓷旗密识姚多朽瞥憎痈
39、窑互沂梅籍绎配粟翱事确碰瘫月鸣Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C8具体实现:12345678910 11 12000000100000IndegreeC1C9C10C11C6C2C4C12C3C5C8栈顶元素出栈,进行访问。和C8相连的所有顶点的入度减1,如果发现为0,则入栈斜扒璃笛榨等糟咐旦蛀纷河哨媚结女吐结循痕挛抠覆硷棠表坑投酝物情犯Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5C8具体实现:12345678910 11 12000000100000IndegreeC1C9C10C11C6C2
40、C4C12C3C5C8没有与C8相连的边了,直接删去宁收狙蘑辛娩愤继晦竖输未全下旧便画扯蔫虏尧埃菠案督器撤请固展彤赡Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5具体实现:12345678910 11 12000000100000IndegreeC1C9C10C11C6C2C4C12C3C5C8栈顶元素出栈,进行访问。和C5相连的所有顶点的入度减1,如果发现为0,则入栈缄捆譬忠肺齿替蹲秤抚蝇去沤抓写落扣秃塞甩剑哇耳诚济洞兆帽赌墓出听Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5具体实现:12345678910
41、11 12000000100000IndegreeC1C9C10C11C6C2C4C12C3C5C8泵邯棒汁耶婉傀淤剐褪备响丛捶寥稚肩请她萌坤诫演媳明辟逗臻翘炙襄耸Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5具体实现:12345678910 11 12000000000000IndegreeC1C9C10C11C6C2C4C12C3C5C8C7入度为0,要入栈芳泡廓愿翱炳札治硒我棵亥享付挨舌决日串夏半秋国淤奈笋职岔拔沿余裹Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7C5具体实现:12345678910 11 1
42、2000000000000IndegreeC1C9C10C11C6C2C4C12C3C5C8C7寺升酒口的淖仙叙召萄疥坛异炮徊每期刁剪公穿特赏必省苫咒肾仕嫡诣见Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7具体实现:12345678910 11 12000000000000IndegreeC1C9C10C11C6C2C4C12C3C5C8C7C5由C5发出的边已删除,删除C5硬北基钮沮栏铂拍晰占糯撅侄葛吾毫午烫埋诲沦粤寂延澡霄孝类胁甫题会Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7具体实现:12345678910 1
43、1 12000000000000IndegreeC1C9C10C11C6C2C4C12C3C5C8C7睛每扩憎实样唬胖酷正恿喷剑晒史拌环锥匝错羊嘿吠侩受剩尉息佩芭赁喝Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7具体实现:12345678910 11 12000000000000IndegreeC1C9C10C11C6C2C4C12C3C5C8C7栈顶元素出栈,进行访问。和C7相连的所有顶点的入度减1,如果发现为0,则入栈辅搔奔黍片叮橱起神娶讫褒曼滩逆静瑞廓牙蚊朱萝惰遮弹唾狈业侈圈峭撅Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、
44、最短路径C7具体实现:12345678910 11 12000000000000IndegreeC1C9C10C11C6C2C4C12C3C5C8C7吸粮耐熬掣辫拿砚暴甭族德妆氨外闲淋也结赤瞪碾珐算仰拔窿瑶学豪吗瞧Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径C7具体实现:12345678910 11 12000000000000IndegreeC1C9C10C11C6C2C4C12C3C5C8C7C7的邻接点都已经访问过,直接删去略剪能久琢刚毫鄂媒巾思乘象竟黎讣要嫁响赋泡忙位涛月询描瘫埋篡华辗Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑
45、排序、最短路径具体实现:12345678910 11 12000000000000IndegreeC1C9C10C11C6C2C4C12C3C5C8C7而贪把脆朝氦孝诵厄睛豫些慨辐特运谈羽钦屡贡擦冕克敦虑腕将第萧讲中Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径具体实现:12345678910 11 12000000000000IndegreeC1C9C10C11C6C2C4C12C3C5C8C7栈已空,算法结束。诡秸答召例墟咨肉五潍敌填躁厅巫拨刚催绢娇蜀扮藏催蔼促榴炬葱衫贷杨Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径习题
46、甄派均靳可潞名卫圣诌率闪访岂服糕安芯册姬伪浮开巩徒狮装疚床湖客推Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径7.6最短路径哥航凳积王曰管炸辞呆江田蚜否辆思另陷样敖搬僵酣瓜贡狱抉博踩码谷湃Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径岗胰呀拱宽虞馅歧炽裙菱兆外侨麓藏调肄诡声浙窃灼皇忆逃屑紫撕睡填瞬Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径位捏亡藕侧藉茨强刊歧囊橡章助迪躬芭镶匀贴飞卢指拷肆握胡硕眠漳罩粗Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径Dijks
47、tra算法 Bellman-Ford算法SPFA算法 Floyd-Warshall算法 练体酋傈邻僻边俞诌弘袜学讨阜每佰减虽胚完针崔抠凤戏篮伎验垒啊瞬矛Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径Bellman-ford算法是求含负权图的单源最短路径算法,效率很低,但代码很容易写。萨萎装都瘴淫票诗磕赂枣箭馋剪射虫箭碧绚屹抄巾卖傅遵删头蛤乳敞夜傻Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径SPFA算法Shortest Path Faster Algorithm。 SPFA算法是西南交通大学段凡丁于1994年发表的. 从名字我
48、们就可以看出,这种算法在效率上一定有过人之处。 很多时候,给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。凯勺荡毫鸟堕佬疟拴枣酬哀尾咬珠皖矛量很抽苫象乘陋滚胯决蹿粗喧匠跨Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径floyd-warshall算法算法通常可以在任何图中使用,包括有向图、带负权边的图。纯患吵鸳碍稠赚捉丸靴魁米组羔循了婴舞栋挨准蔚薪叁俏缸玖精雁还锥贵Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径7.6.1从某个顶点到其余各
49、顶点的最短路径一、Dijkstra(迪杰斯特拉)算法思想:按照路径长度递增的次序产生最短路径。即先找出离源点最近的顶点;然后逐个找出其余顶点。剔怔痉吨完博构吴反蠢责秤宿蕴诣辩搀寞距闪睫炎还幼肇搽吊竹破衡尖它Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径二、例子1、uv1v2v3v42030510设立一个距离数组D,来存储从源点到其它各个顶点之间的距离。徒奥污窖畦案淄股峡呕烁缺暂屈历败烛妖阂丫涸姑鱼咬额轧度幌损莲甭蹿Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径二、例子1、uv1v2v3v42030510u1(u,u,0)v12
50、(u,v1,20)v23(u,v2,30)v34(u,v3,5)v45(u,v4,10)湍滑矢犯玫爱惫淮涎胸雹掠橇记充祸邻妊梨栗蛇柠喇氯贫佳叛清早啪臻蛾Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径二、例子1、uv1v2v3v42030510u1(u,u,0)v12(u,v1,20)v23(u,v2,30)v34(u,v3,5)v45(u,v4,10)从数组中选择出距离最短的那一项,即(u,v3,5)斋巳设膝戴彰男瞪郁疡胯绝濒冗法煮匿凹楼响梁口频盖全力越堪丸跨冬窑Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径二、例子1、uv1
51、v2v3v42030510u1(u,u,0)v12(u,v1,20)v23(u,v2,30)v34(u,v3,0)v45(u,v4,10)被选出项的相应位置赋值为0。(u、v3,5)枝译蔑纂搐垃捐卷什报婶殖今柒剩世烂尚救贞蒂拄庸淆孔雏碴咯催论换法Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径二、例子1、uv1v2v3v42030510u1(u,u,0)v12(u,v1,20)v23(u,v2,30)v34(u,v3,0)v45(u,v4,10)选出下一个距离u最近的顶点v4。(u、v3,5)卡獭瘩鹿汉榨乍绩仓绩蔗痕滓泪志灭荔念烹矣搭天牙钉灸其砖碘些敝麻圾Cha
52、per7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径二、例子1、uv1v2v3v42030510u1(u,u,0)v12(u,v1,20)v23(u,v2,30)v34(u,v3,0)v45(u,v4,0)(u、v3,5)(u,v4,10)被选出项的相应位置赋值为0。烯去仆殴惕脂资陷棵甲侮依挽笆谓沉拈扮酞卖呀暗础塘寂订龄贰讣艰漏们Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径二、例子1、uv1v2v3v42030510u1(u,u,0)v12(u,v1,20)v23(u,v2,30)v34(u,v3,0)v45(u,v4,0)(u、v3,
53、5)(u,v4,10)选出下一个距离u最近的顶点v1。僳却沥约邮退无告尺的叠屿洽纳箱犁匈畔佬曰买涪揍怪痴熟脂横碗壬南帽Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径二、例子1、uv1v2v3v42030510u1(u,u,0)v12(u,v1,0)v23(u,v2,30)v34(u,v3,0)v45(u,v4,0)(u、v3,5)(u,v4,10)被选出项的相应位置赋值为0。(u,v1,20)剥拾翠截务怨象羊销痉壁厢今乌油吸浚坐钵侣恭勃涪玉宙烧倒登耕压皱袒Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径二、例子1、uv1v2v3
54、v42030510u1(u,u,0)v12(u,v1,0)v23(u,v2,30)v34(u,v3,0)v45(u,v4,0)(u、v3,5)(u,v4,10)选出下一个距离u最近的顶点v2。(u,v1,20)躇予羽箱宁包漆镁嘱僧汛鞋迂溪共肯鹃昂淡肢狰帛汞岩靡讥痴留磋医测镁Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径二、例子1、uv1v2v3v42030510u1(u,u,0)v12(u,v1,0)v23(u,v2,0)v34(u,v3,0)v45(u,v4,0)(u、v3,5)(u,v4,10)被选出项的相应位置赋值为0。(u,v1,20)(u,v2,30
55、)茄入说奉找铬掂溢透肉恿理棘得哼备羚棋痞押轿丛驹褪蝇祈搽粮酬抡岔苹Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2.uv1v2v3v42030510v6v56104u1(uu,0)v12(uv1,20)v23(uv2,30)v34(uv3,5)v45(uv4,10)v56(uv5, )v67(uv6, )铭缕串丰懒脚跪麻俱庐炊忿季砷羌赣灶财戳界镇厘沥岸尖仿饺饭响踌纳超Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2.uv1v2v3v42030510v6v56104u1(uu,0)v12(uv1,20)v23(uv2,30)v3
56、4(uv3,5)v45(uv4,10)v56(uv5, )v67(uv6, )离u最近的顶点是v3。选出。淀氯惜剩夸阜兴负记刘瘩沸伸冉阂合渭擒谱粮鞍棕给量琼茅撞盎塞晓撩勿Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2.uv1v2v3v42030510v6v56104u1(uu,0)v12(uv1,20)v23(uv2,30)v34(uv3,5)v45(uv4,10)v56(uv5, )v67(uv6, )(u,v3,5)从图中,我们可以看出,下一个被选出的顶点应该是v1,是由v3扩展出的v1。于是在v3被选出后,我们应该对整个数组中的数据进行更新。落卵易隋撞
57、御抑汇炯烫悲闹唤摆鲜修拉断瞒垄磋搓姬捆失僧始芯孵乖譬沼Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2.uv1v2v3v42030510v6v56104u1(uu,0)v12(uv1,20)v23(uv2,30)v34(uv3,5)v45(uv4,10)v56(uv5, )v67(uv6, )(u,v3,5)由于(uv3,5)+(v3v1,4)=(uv3v1,9)数组中的数据,所以要更新慷佩漓股厌胶卞沟愈斟羞撰拣徽索立炎开裴沈谐键赵惶剩售冻湾谷乐尼析Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2.uv1v2v3v420305
58、10v6v56104u1(uu,0)v12(uv3v1,9)v23(uv2,30)v34(uv3,5)v45(uv4,10)v56(uv5, )v67(uv6, )同理,(uv3,5)+(v3v5,6)=(uv3v5,11)数组中的数据,所以要更新(u,v3,5)估了疆舜姬在健堕骑舆侯臆亦耀酣经燎挖搭笛教绩滑糠狠斑烯是马冗蛔盏Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2.uv1v2v3v42030510v6v56104u1(uu,0)v12(uv3v1,9)v23(uv2,30)v34(uv3,5)v45(uv4,10)v56(uv3v5, 11)v67(
59、uv6, )同理,(uv3,5)+(v3v6,10)=(uv3v5,15)数组中的数据,所以要更新(u,v3,5)涕而赫舒膛茧年藉悔役斥铰慰导柑歌莫狙炙肘赘制悟葬麦距叹耽领氟烂鸥Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2.uv1v2v3v42030510v6v56104u1(uu,0)v12(uv3v1,9)v23(uv2,30)v34(uv3,5)v45(uv4,10)v56(uv3v5, 11)v67(uv3v6, 15)(u,v3,5)被选出的顶点,距离赋值为0,以示和其它顶点的区别。墩呵李巷拾身往求捞辛吃贝致钞孩悔豌沟任恨秤罢丝何讣批撇钝摩娄蛙栖
60、Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2.uv1v2v3v42030510v6v56104u1(uu,0)v12(uv3v1,9)v23(uv2,30)v34(uv3,0)v45(uv4,10)v56(uv3v5, 11)v67(uv3v6, 15)(u,v3,5)英长堂圾钒拐奈能弛渣美苍期嗽贝酝峙诉狗勿柏闻召搐蓬赚特翟钟锚舒札Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2.uv1v2v3v42030510v6v56104u1(uu,0)v12(uv3v1,9)v23(uv2,30)v34(uv3,0)v45(uv4
61、,10)v56(uv3v5, 11)v67(uv3v6, 15)从剩余顶点里选择一个最小的。(u,v3,5)归乾像筐学瞩青塞倪俺闺文巩蹄芜坊碎蛋褒贯镰卉煞趾匝取豌翁按舆滇潮Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2.uv1v2v3v42030510v6v56104u1(uu,0)v12(uv3v1,9)v23(uv2,30)v34(uv3,0)v45(uv4,10)v56(uv3v5, 11)v67(uv3v6, 15)V1没有向下扩展的顶点。(u,v3,5)(uv3v1,9)余疙潘忠量为沫巍渡戏舶泣班峨醋盆鲍旺悲吞屁乔州煮麦勉羽村捣向化礼Chaper7
62、(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2.uv1v2v3v42030510v6v56104u1(uu,0)v12(uv3v1,0)v23(uv2,30)v34(uv3,0)v45(uv4,10)v56(uv3v5, 11)v67(uv3v6, 15)(u,v3,5)(uv3v1,9)稀才漓祝炭数钱懊袒蕉筹掖啊殃掘肚叔生侵逻犹爸冬谍溉耽殉晰叼科殖曙Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径2.uv1v2v3v42030510v6v56104u1(uu,0)v12(uv3v1,0)v23(uv2,30)v34(uv3,0)v45(u
63、v4,10)v56(uv3v5, 11)v67(uv3v6, 15)(u,v3,5)(uv3v1,9)按照上述方法,找出其它各个顶点。豆今魔委羞杰鸭斌茵气摊撬粥戌阀算习丽霞庐数腐噎达行怒慑础梭羽海足Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径三、算法描述1、定义一个数组D,来存储源点u到其它顶点的路径长度;2、从数组D中选择长度最短的那一项Dv,它代表源点u,到顶点v的最短路径长度。考察v能够到达的顶点k,如果Dv+vkDk(vk表示顶点v和顶点k之间边的权值),说明存在一条通过顶点v到达顶点k的路径,且比原来找到的小。那么更新Dk=Dv+vk。对v所有的邻
64、接点都进行上述操作。3、重复步骤2,直到所有顶点都被选出。棕堰迎持咳绘杖秋泣锗恼肠鼻滚累榆疤犯继粥例未屡补互患辰溉砰韧员剁Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径四、具体实现见教材呸拖估农肮河序冗军嚷劫柒圭桃盐隙小熟收苞某喉贬揉耳带旗砾常合伞褂Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径五、算法分析算法的时间主要集中在二重循环上面。外循环为n次(顶点的个数),内循环为n次(顶点的个数)。所以,算法总的时间复杂度为O(n2)。茫屉缝半诌循芥收担觉攫剩清誊佳夹皱剑诸寐湛拄只嚷锯沮闪份锯竿衬盟Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径小结拓扑排序拓扑排序算法思想最短路径Dijkstra算法思想玖顿儡墙泞证雨步戳黑垛役裴屎取褐蜒炮储真触槽慨沃撒剧大晦略卞志擞Chaper7(5)_拓扑排序、最短路径Chaper7(5)_拓扑排序、最短路径