3、路径算法{int*dist=newint[Num];//记彔最短权值int*prev=newint[Num];//记录路径int*s=newint[Num];//s为己经确定好的顶点域inti,j,k,m;//j记录dist的下标m=start;for(i=0;i〈Num;i++)//初始化dist[i]=Adj[m*Nura+i];prev[i]=m;//记录源点到顶点的最短路径上,本顶点的前一顶点s[i]=O;//顶点i不在s域中}prev[ni]=-1;//ni是源点前一顶点不存在s[m]=l;//源点在s域中for(i=0;i<Num-l;i++)//差N
4、um-1个顶点需处理{intmin;//最小权for(k=0;k<Num;k++)if(!s[k])break;//找到仍在顶点-S域中的第一个顶点min=dist[k];j=k;for(k=j+l;k<Nura;k++)//找最小权值的边if(!s[k]&&dist[k]〈min){min=dist[k];j=k;}s[j]=l;//放进s域屮for(k=0;k<Num;k++)//更新最短路径值if(!s[k]&&dist[j]+Adj[j*Num+k]<dist[k]){dist[k]=dist[j]+Adj[j*Num+k];//记录最短路径prev[k]
5、=j;//记录路径即本顶点k的前驱顶点j}}ofstreamoutput("output,txt",ios::out);if(output==NULL)exit(0);for(k=0;k<Num;k++)//输出打印if(k!=m){if(dist[k]>=MaxNum){output<〈〃源点〃〈<start〈〈〃到顶点〃<〈k〈〈〃不存在相通的路径〃〈<endl〈<endl;}else{output〈〈〃源点〃<〈start<〈〃到顶点〃<<k〈〈〃的最小花费为:"〈<dist[k]〈<endl;//输出最小权值j=k;stack〈int〉Q;output<〈
6、〃路径为:〃;while(j!=m){Q.push(j);j=prev[j];}//路径存入栈中Q.push(j);while(Q.size()!=1){output«Q.top()〈<"~〉’’;Q.pop();}//输出路径output«Q.top()«endl«endl;Q.pop();//最后一个元素出栈}}}intmain(){GraphG;cout〈〈〃请输入起点:〃〈7、ineN7^defineI999graph[N][N]二{{I,4,5,8,T,T,T},{I,I,I,6,6,I,I},{I,I,I,5,I,7,I},{I,I,I,I,8,9,9},{I,I,I,I,I,T,5},{I,I,I,I,I,I,4},{I,I,I,1,I,1,1}/*顶点数目*//*表示无穷大*//*图的邻接矩阵*//*存放拓扑序列*//*拓扑排序蛾数*/A主函数*//*最长最短距离*//*记录路径数据*/intList[N];intTopologicalOrder0;voidmain(){inti,j,k,1;intee[N],el[N];int
8、path_