最短路径模板总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路径模板总结相关的知识,希望对你有一定的参考价值。
dis[u][v]=w[u][v]||0x7ffffffff; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(dis[i][j]>dis[i][k]+dis[k][j]) dis[i][j]=dis[i][k]+dis[k][j]; } /*Floyed-Warshall*/ b[s]=1;c[s]=1; for(i=1;i<=n-1;i++){ k=0; minl=maxx; for(j=1;j<=n;j++) { if(!b[j]&&f[i][j]<minl) { k=j; minl=f[i][j]; } if(k==0) break; b[k]=1; for(i=1;i<=n;i++) if(c[k]+f[k][j]<c[j]) c[j]=c[k]+f[k][j]; } } /*dijkstra*/ dis[i-n]=oo; dis[s]=0; for(int i=1;i<=n-1;i++) for(int j=1;j<=E;j++) if(dis[u]+w[j]<dis[v]) { dis[v]=dis[u]+w[j]; pre[v]=u;} /*bellman-ford*/ pre[v]=u; pre[s]=0; printf("%d",s); void print(int x) { if(pre[x]==0)return; printf(pre[x]); printf("-->%d",x); } q[1001],tail,head; dis[801]; b[101]; w[1001][1001]//邻接矩阵 a[1001][1001]//出度是多少,出度是谁 dis[s]=0; q[1]=i; tail=1;head=0; b[s]=1; a[i][++a[i][0]]=j; do { head++; head=((head-1)%1001)+1; u=team[head]; b[u]=0; for(int i=1;i<=a[u][0];i++) { if(dis[i]>dis[u]+w[u][a[u][i]]) { dis[i]=dis[u]+w[u][a[u][i]]; if(!b[a[u][j]]) { tail++; tail=((tail-1)%1001)+1; q[tail]=a[u][j]; b[a[u][j]]=1; } } } }while(head!=tail); /*SPFA*/ /*单原点输出路径*/ pre[i][j]=pre[k][j]; pre[a][a]=0; printf("%d",a); int ptint(int x) { if(pre[a][x]==0);return ; print(prea[a][x]); printf("--》%d",pre[a][x]) } /*多原点输出路径*/
我爱我自己?!!
以上是关于最短路径模板总结的主要内容,如果未能解决你的问题,请参考以下文章