问题 3961 --单源最短路径长度(完善程序)

3961: 单源最短路径长度(完善程序)★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 87  解决: 64
[提交][状态][命题人:]

题目描述

用Dijkstra算法求解v0到其他各点的距离


#include <iostream>
#include <cstdio>
using namespace std;
int dis[10][10],minDist[10];
bool visit[10]; 
const int Dis_MAX=1000000000;
int main()
{
    int n,m;
    for(int i=0;i<6;i++)
    {
        for(int j=0;j<6;j++)
        if(i!=j) dis[i][j]=Dis_MAX;
        else dis[i][j]=0;
    }
    dis[0][2]=10;
    dis[0][5]=100;
    dis[0][4]=30;
    dis[1][2]=5;
    dis[2][3]=50;
    dis[3][5]=10;
    dis[4][3]=20;
    dis[4][5]=60;        
     
    int start=0,end;
    cin>>end;
    for(int i=0;i<=5;i++)
        minDist[i]=_____(1)______;
		//minDist[i]表示从起点到i的最短路径 
     
    visit[start]=true;//已确定最短路的结点集合P 
    minDist[start]=0;
    for(int i=1;i<=5;i++)
    {   //做5遍就能把未确定最短路的结点集合Q遍历空
        int minn=Dis_MAX;
        int k;
        for(int j=1;j<=5;j++)
		{//寻找Q中最近的结点
            if(______(2)______)
			{
                minn=minDist[j];
                k=j; 
            }
        }
        _______(3)_______;//加入P集合
        for(int j=1;j<=5;j++)
		{   //对k的所有边进行松弛
            minDist[j]=________(4)_______;
        }
    }
    if(______(5)_______)
        printf("%d",minDist[end]);
    else
        printf("-1");
    return 0;
} 


输入

一个整数n,1<=n<=5

输出

求出v0到第n个点的最短距离。如果不能达,则输出-1
样例输入
Copy
5
样例输出
Copy
60

提示

来源

[提交][状态]