题意不在重复,对比堆优化和没优化的
速度碾压
优化思路在叙述一遍:
整体上差别还是很大的因为堆优化用了结构体存边(模拟邻接表(但性能比不过链式前向星)) 而一般是用邻接矩阵存图(这个也能用邻接矩阵,不过太慢了,数据大的话还是用边吧) ,然后是就是pair自定义了大小也就懒得再开结构体了
还一个特别的点就是更新点时没办法去掉老的dis所以 就标记每次更新点的值 下次看它是不是一直都是这个值 是表示这个是此时的最佳点,不是表示这个点已经用过了跳过
ac代码:
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
int dis[200];
int main(){
    int n,m;
    while(cin>>n>>m&&(n||m)){
        vector<P>G[200];
        for(int i=0;i<m;i++){
            int x,y,cost;
            cin>>x>>y>>cost;
            G[x].push_back(P(cost,y));
            G[y].push_back(P(cost,x));
        }
        memset(dis,0x3f3f3f3f,sizeof dis);
        dis[1]=0;
        priority_queue<P,vector<P>,greater<P> > que;//pair 自定义大小按first尾第一关键字 second为第二关键字
        que.push(P(0,1));
        while(!que.empty()){
            P p=que.top();
            que.pop();
            int now=p.second;
            if(dis[now]<p.first) continue;
            for(int i=0;i<G[now].size();i++){
                P e=G[now][i];
                if(dis[e.second]>dis[now]+e.first){
                    dis[e.second]=dis[now]+e.first;
                    que.push(P(dis[e.second],e.second));
                }
            }
        }
        cout<<dis[n]<<endl;
    }
}