最短路模板

来源:互联网 发布:ios 新闻app源码 编辑:程序博客网 时间:2024/05/17 02:50



SPFA:


void SPFA(int k){                bool visit[1010];                int d[1010];                queue<int>a;                int i,j;                for(i=0;i<=N;i++)                {                      d[i]=INT_MAX;                      visit[i]=false;                }                visit[k]=true; d[k]=0;                a.push(k);                while(a.empty()==false)                {                       int t=a.front();                       a.pop();  visit[t]=false;                       for(i=1;i<=N;i++)                       if(edges[t][i]!=0 && i!=t)                       {                                      if(d[i]>d[t]+edges[t][i])                                      {                                           d[i]=d[t]+edges[t][i];                                           if(visit[i]==false)                                          {                                                 a.push(i);                                                 visit[i]=true;                                          }                                       }                        }                 }}



Floyd:


/*g[i][j]表示i到j的最短路径*/void floyd(){for(int k = 0; k < n; k++)for(int i = 0; i < n; i++)for(int j = 0; j < n; j++)if(g[i][k] < inf && g[k][j] < inf)g[i][j]=min(g[i][k] + g[k][j],g[i][j]);//从i到j经过k时的路径和直接从i到j的路径中取最小值}



dijkstra:


//节点0到n-1void dijkstra(int s){memset(visit,0,sizeof(visit));for(int i=0;i<n;i++){dis[i]=g[s][i];pre[i]=s;}visit[s]=1;while(1){int minn=1<<29,p=-1;for(int i=0;i<n;i++){if(visit[i]==0 && dis[i]<minn){minn=dis[i];p=i;}}if(p==-1)break;visit[p]=1;for(int i=0;i<n;i++){if(visit[i]==0 && g[p][i]+dis[p]<dis[i]){dis[i]=g[p][i]+dis[p];pre[i]=p;}}}}



0 0
原创粉丝点击