Dijkstra-基础

mac2022-06-30  18

//迪杰斯特拉算法的伪码描述 void Dijk(int s){ 初始化 for(进行n次循环){ for() 找d[]最小的顶点u 标记已访问u for() 找u未被访问的邻接点v,能优化的优化d[] } } //example int n; bool vis[maxn]={false}; fill(G[0],G[0]+maxn*maxn,inf); //G[][] void Dijk(int s){ fill(d,d+maxn,inf); d[s]=0; for(int i=0;i<n;i++){ int u=-1,min=inf; for(int j=0;j<n;j++){ if(vis[j]==false&&d[j]<min){ min=d[j]; u=j; } } if(u==-1) return ; vis[u]=true; for(int v=0;v<n;v++){ if(vis[v]==false&&G[u][v]!=inf&&d[v]>G[u][v]+d[u]){ d[v]=G[u][v]+d[u]; } } } } //Adj struct node{ int id; int dis; }; void Dijk(int s){ fill(d,d+maxn,inf); d[s]=0; for(int i=0;i<n;i++){ int u=-1,min=inf; for(int j=0;j<n;j++){ if(vis[j]==false&&d[j]<min){ min=d[j]; u=j; } } if(u==-1) return ; vis[u]=true; for(int j=0;j<Adj[u].size();j++){ int v=Adj[u][j].id; int dis=Adj[u][j].dis; if(vis[v]==false&&d[v]>G[u][v]+d[u]){ d[v]=d[u]+dis; } } } }

 

最新回复(0)