当前位置: 代码迷 >> 综合 >> Dijkstra-基础
  详细解决方案

Dijkstra-基础

热度:65   发布时间:2023-12-06 22:09:27.0
//迪杰斯特拉算法的伪码描述
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;				}}		}	
}