最短路 spfa, dijkstra, Floyd
来源:互联网 发布:手机淘宝5.8.0 编辑:程序博客网 时间:2024/05/09 02:21
spfaView CodeView CodeView Code
1 #include <stdio.h> 2 #include <queue> 3 using namespace std; 4 5 #define RANGE 101 6 #define MAX 0x3f3f3f3f 7 int cost[RANGE][RANGE]; 8 int d[RANGE]; 9 bool used[RANGE];10 int n,m;11 12 void spfa( int s )13 {14 int i,now;15 // 初始化16 for( i=1;i<=n;++i )17 {18 d[i]=MAX;19 used[i]=false;20 }21 22 d[s]=0;23 queue <int> q;24 q.push(s);25 used[s] = true;26 27 while(!q.empty())28 {29 now = q.front();30 q.pop();31 used[now] = false;32 for(i = 1; i <= n; i++)33 {34 if(d[i] > d[now] + cost[now][i])35 {36 d[i] = d[now] + cost[now][i];37 if(used[i] == 0)38 {39 q.push(i);40 used[i] = true;41 }42 }43 }44 }45 }46 47 int main()48 {49 int i,j,A,B,C;50 while( scanf("%d%d",&n,&m) )51 {52 if( !n && !m ) break;53 // 初始化54 for( i=1;i<=n;++i )55 for( j=1;j<=i;++j )56 if( i==j ) cost[i][j]=0;57 else cost[i][j]=cost[j][i]=MAX;58 59 for( i=0;i<m;++i )60 {61 scanf("%d%d%d",&A,&B,&C);62 cost[A][B]=cost[B][A]=C;63 }64 65 spfa(1);66 printf("%d\n",d[n]);67 }68 return 0;69 }
dijkstra
1 #include <stdio.h> 2 #define MAX 0x3f3f3f3f 3 #define RANGE 101 4 5 int cost[RANGE][RANGE]; 6 int d[RANGE]; 7 bool used[RANGE]; 8 9 int n,m;10 int Min( int a,int b )11 {12 return a<b?a:b;13 }14 15 void Dijkstra( int s )16 {17 int i,v,u;18 for( i=1;i<=n;++i )19 {20 used[i]=false;21 d[i]=cost[1][i];22 }23 d[s]=0;24 25 while( true )26 {27 v=-1;28 for( u=1;u<=n;++u )29 if( !used[u] && ( v==-1 || d[u]<d[v]) )30 v=u;31 if( v==-1 ) break;32 used[v]=true;33 34 for( u=1;u<=n;++u )35 d[u]=Min( d[u],d[v]+cost[v][u] );36 }37 }38 39 int main()40 {41 int A,B,C,i,j;42 43 while( scanf("%d%d",&n,&m) )44 {45 if( !n && !m ) break;46 47 // 初始化48 for( i=1;i<=n;++i )49 for( j=1;j<=i;++j )50 if( i==j ) cost[i][j]=0;51 else cost[i][j]=cost[j][i]=MAX;52 53 for( i=0;i<m;++i )54 {55 scanf("%d%d%d",&A,&B,&C);56 cost[A][B]=cost[B][A]=C;57 }58 59 Dijkstra(1);60 printf("%d\n",d[n]);61 }62 return 0;63 }
floyd
1 #include <stdio.h> 2 #define MAX 0x3f3f3f3f 3 #define RANGE 105 4 5 int d[RANGE][RANGE]; 6 int n; 7 8 int Min( int a,int b ) 9 {10 return a<b?a:b;11 }12 void warshall_floyd( void )13 {14 int i,j,k;15 for( k=1;k<=n;++k )16 for( i=1;i<=n;++i )17 for( j=1;j<=n;++j )18 d[i][j]=Min( d[i][j],d[i][k]+d[k][j] );19 }20 21 int main()22 {23 int m,A,B,C,i,j;24 25 while( scanf("%d%d",&n,&m) )26 {27 if( !n && !m ) break;28 29 // 初始化30 for( i=1;i<=n;++i )31 for( j=1;j<=i;++j )32 {33 if( i==j ) d[i][j]=0;34 else d[i][j]=d[j][i]=MAX;35 }36 37 // 输入38 for( i=0;i<m;++i )39 {40 scanf("%d%d%d",&A,&B,&C);41 d[A][B]=d[B][A]=C;42 }43 44 // floyd算法求最短路45 warshall_floyd();46 printf("%d\n",d[1][n]);47 }48 return 0;49 }
0 0
- 最短路 spfa, dijkstra, Floyd
- 最短路【dijkstra】【floyd 】【spfa】
- hdu 2544 最短路 (dijkstra/floyd/spfa)
- [dijkstra/SPFA/floyd]HDU 2544最短路
- 【最短路三算法】Floyd,Dijkstra,SPFA.
- 最短路模板 Dijkstra+Floyd+SPFA
- HDU2544---最短路(dijkstra&&floyd&&spfa)
- hdoj 2544 最短路【dijkstra、floyd、spfa】
- [模板]最短路 (Floyd, Spfa, Dijkstra,
- 最短路模板 floyd+dijkstra+spfa
- HDU 2544-最短路(SPFA,Dijkstra,Floyd)
- ACM_最短路模板(SPFA,Dijkstra,Floyd)
- HDOJ 2544 最短路 (最短路 Dijkstra && SPFA && Floyd)
- hdu2544最短路【最短路dijkstra&&SPFA&&floyd】
- hdoj-2544 最短路【最短路径--dijkstra&&spfa&&floyd】
- 【最短路+dijkstra+floyd+spfa】1596 find the safest road
- Hdu 2544 最短路 (Dijkstra+SPFA+Floyd模板)
- 最短路算法详解(Dijkstra/SPFA/Floyd)
- 判断变量是否不为空,函数isset()、!empty()与!is_null()的比较
- POJ2411 状态压缩dp
- uva 11248 最小割
- LA 2531 The K-league 最大流
- FFT之大数乘法
- 最短路 spfa, dijkstra, Floyd
- Android布局详解之一:FrameLayout
- K短路 spfa + A*
- JAVA学习【2】错误:无法从静态上下文中引用非静态
- 线段树模板
- 字符串处理之后缀数组
- c#调用Win32 API如何处理指针类型的参数
- AC自动机 hdu2222
- 最小费用最大流