标签:
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<vector> #include<set> #include<stack> #include<string> #include<sstream> #include<map> #include<cctype> using namespace std; #define INF 99999999 int main() { int e[101][101]; int n,m,a,b,c,i,j,k; while(~scanf("%d %d",&n,&m)&&n!=0&&m!=0) { for(i=1;i<=n;i++) // 将 各个边 初始化 为 最大值 for(j=1;j<=n;j++) e[i][j]=INF; while(m--) { scanf("%d%d%d",&a,&b,&c); // 确定边 和 边长 e[b][a]=e[a][b]=c; } for(k=1;k<=n;k++) //Floyd核心算法... { for(i=1;i<=n;i++) // 所有的 路 都让 k 加进去试试 { for(j=1;j<=n;j++) //如果 从 i到j的路上 有k 走的会更轻松的话 , 那就让 k 去吧 { if(e[i][j]>e[i][k]+e[k][j]) // 判断 是否会 更加轻松 e[i][j]=e[i][k]+e[k][j]; } } } printf("%d\n",e[1][n]); } }
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<iostream> 5 #include<algorithm> 6 #include<queue> 7 #include<vector> 8 #include<set> 9 #include<stack> 10 #include<string> 11 #include<sstream> 12 #include<map> 13 #include<cctype> 14 using namespace std; 15 #define INF 99999999 16 int n,m,a[105][105],result; 17 vector<int>v[105]; 18 void DFS(int star,int dis) 19 { 20 if(dis>=result) 21 return; 22 if(star==n) 23 { 24 result=result>dis?dis:result; 25 return ; 26 } 27 for(int i=0;i<v[star].size();i++) 28 { 29 if(a[star][v[star][i]]!=INF) 30 { 31 int w=a[star][v[star][i]]; 32 a[star][v[star][i]]=INF; 33 a[v[star][i]][star]=INF; 34 DFS(v[star][i],w+dis); 35 a[star][v[star][i]]=w; 36 a[v[star][i]][star]=w; 37 } 38 } 39 } 40 int main() 41 { 42 for(int i=0;i<105;i++) 43 for(int j=0;j<105;j++) 44 a[i][j]=INF; 45 while(scanf("%d%d",&n,&m),(m||m)) 46 { 47 result=INF; 48 for(int i=0;i<m;i++) 49 { 50 int d,b,c; 51 scanf("%d%d%d",&d,&b,&c); 52 v[d].push_back(b); 53 v[b].push_back(d); 54 a[d][b]=c; 55 a[b][d]=c; 56 } 57 DFS(1,0); // 从 1 到 n . 58 printf("%d\n",result); 59 } 60 }
标签:
原文地址:http://www.cnblogs.com/A-FM/p/5373849.html