Dijkstra(迪杰斯特拉)算法模板

来源:互联网 发布:点对点视频软件 编辑:程序博客网 时间:2024/06/07 17:52
const int maxn=1000;const int inf=1e9;//邻接矩阵版int n,G[maxn][maxn];int d[maxn];bool vis[maxn]={false};void dijkstra(int s){    fill(d,d+maxn,inf);    d[s]=0;    for(int i=0;i<n;i++){        int u=-1,mind=inf;        for(int j=0;j<n;j++) if(!vis[j]&&d[j]<mind)            {u=j;mind=d[j];}        if(u==-1) return;        vis[u]=true;        for(int v=0;v<n;v++){            if(!vis[v]&&G[u][v]!=inf&&d[u]+G[u][v]<d[v]) d[v]=d[u]+G[u][v];        }    }}//邻接表法vector<int> Adj[maxn];int n;int d[maxn];bool vis[maxn]={false};struct Node{    int v,dis;};void dijkstra(int s){    fill(d,d+maxn,inf);    d[s]=0;    for(int i=0;i<n;i++){        int u=-1,mind=inf;        for(int j=0;j<n;j++) if(!vis[j]&&d[j]<mind)            {u=j;mind=d[j];}        if(u==-1) return;        vis[u]=true;        for(int j=0;j<Adj[u].size();j++){            int v=Adj[u][j].v;            if(!vis[v]&&d[u]+Adj[u][j].dis<d[v]) d[v]=d[u]+Adj[u][j].dis;        }    }}

原创粉丝点击