acm专题学习之最短路(一)Dijkstra算法+poj-2387

题意:有n个点,给你 t 条带权路,求出从1到n点的最短路

条件: t 条带权路(有路可能会重复)

Dijkstra算法:(Dijkstra算法只能应用于不含负权值的图)

                         算法思路:用一个数组dis记录下所有点到起点的最短距离,最后取dis[终点]。进行n-1次查找,每次找到没有被拜访过离起点最小距离的点,再刷新dis数组。

                         复杂度:O(N^2)

思路:Dijkstra算法的模板题

代码:

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int maxn=1e3+3;
const int inf=1e9+9;;
int mp[maxn][maxn];//邻接矩阵
int dis[maxn];//记录了从第一个点到该点的距离
int vis[maxn];//是否已经拜访过了这个点
int t,n;
void Dijkstra()
{
    for(int i=1; i<=n; i++)
    {
        dis[i]=mp[1][i];
        vis[i]=0;
    }
    int k,min1;
    for(int i=1;i<=n;i++)
    {
        k=0;
        min1=inf;
        for(int j=1;j<=n;j++)
        {
            if(!vis[j]&&dis[j]

总结:1 wa了很多次,没考虑到给的边会重复

你可能感兴趣的:(acm算法学习,acm算法之图论)