L2-001 紧急救援

一、题目

L2-001 紧急救援_第1张图片

二、解题思路

  1. 迪杰斯特拉算法。
  2. 求最短路径的条数:在更新T时,如果是 dis[j]>dis[index]+map[index][j] ,则 cot[j]=cot[index] ,如果是 dis[j]==dis[index]+map[index][j] ,则 cot[j]+=cot[index] 。
  3. 递归输出最短路径。

三、代码

#include
using namespace std;
//无穷大 
#define maxInt 0x3f3f3f3f
//递归输出最短路径 
void printfPath(int end,int pre[])
{
	if(pre[end]!=-1)
	{
		printfPath(pre[end],pre);
		cout<<" "<>n>>m>>start>>end;
//	迪杰斯特拉的四个数组+三个数组 
	int map[n][n],flag[n],dis[n],pre[n],quan[n],army[n],cot[n];
	for(int i=0;i>quan[i];
		army[i]=0;
		cot[i]=1;
	}
	while(m--)
	{
		int i,j;
		cin>>i>>j;
		cin>>map[i][j];
		map[j][i]=map[i][j];
	} 
//	起始节点 
	flag[start]=1;
	dis[start]=0;
	army[start]=quan[start];
	for(int i=0;idis[index]+map[index][j])
			{
				dis[j]=dis[index]+map[index][j];
				pre[j]=index;
				army[j]=army[index]+quan[j];
				cot[j]=cot[index]; 
			}
			else if(flag[j]==0 && dis[j]==dis[index]+map[index][j])
			{
				cot[j]+=cot[index];
				if(army[j]

四、总结

        是无向图,在构造图的矩阵时,cin>>map[i][j] ,要加上 map[j][i]=map[i][j] 。

你可能感兴趣的:(算法,c++,数据结构,迪杰斯特拉算法,Dijkstra)