圖演算法
阿新 • • 發佈:2020-09-10
最短距離
const int maxn=1010; const int INF=1000000000; int n,G[maxn][maxn]; int vis[maxn]={0}; int d[maxn]; void dijkstra(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]==0&&d[j]<min){ u=j; min=d[j]; } } if(u==-1)return; vis[u]=1; for(int v=0;v<n;v++){ if(vis[v]==0&&G[u][v]!=INF&&d[u]+G[u][v]<d[v]){ d[v]=d[u]+G[u][v]; } } } }
最短路徑
const int maxn=1010; const int INF=1000000000; int n,G[maxn][maxn]; int vis[maxn]={0}; int d[maxn]; int pre[maxn]; void dijkstra(int s){ fill(d,d+maxn,INF); d[s]=0; for(int i=0;i<n;i++){ pre[i]=i; } for(int i=0;i<n;i++){ int u=1,min=INF; for(int j=0;j<n;j++){ if(vis[j]==0&&d[j]<min){ u=j; min=d[j]; } } if(u==-1)return; vis[u]=1; for(int v=0;v<n;v++){ if(vis[v]==0&&G[u][v]!=INF&&d[u]+G[u][v]<d[v]){ d[v]=d[u]+G[u][v]; pre[v]=u; } } } }