hdoj 1596 find the safest road
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1596
解题思路:Floyd 算法(邻接矩阵)
1 /************************************************************************** 2 user_id: SCNU20102200088 3 problem_id: hdoj 1596 4 problem_name: find the safest road 5 **************************************************************************/ 6 7 #include <algorithm> 8 #include <iostream> 9 #include <iterator> 10 #include <iomanip> 11 #include <sstream> 12 #include <fstream> 13 #include <cstring> 14 #include <cstdlib> 15 #include <climits> 16 #include <bitset> 17 #include <string> 18 #include <vector> 19 #include <cstdio> 20 #include <cctype> 21 #include <ctime> 22 #include <cmath> 23 #include <queue> 24 #include <stack> 25 #include <list> 26 #include <set> 27 #include <map> 28 using namespace std; 29 30 //线段树 31 #define lson l,m,rt<<1 32 #define rson m+1,r,rt<<1|1 33 34 //手工扩展栈 35 #pragma comment(linker,"/STACK:102400000,102400000") 36 37 const double EPS=1e-9; 38 const double PI=acos(-1.0); 39 const double E=2.7182818284590452353602874713526; //自然对数底数 40 const double R=0.5772156649015328606065120900824; //欧拉常数:(1+1/2+...+1/n)-ln(n) 41 42 const int x4[]={-1,0,1,0}; 43 const int y4[]={0,1,0,-1}; 44 const int x8[]={-1,-1,0,1,1,1,0,-1}; 45 const int y8[]={0,1,1,1,0,-1,-1,-1}; 46 47 typedef long long LL; 48 49 typedef int T; 50 T max(T a,T b){ return a>b? a:b; } 51 T min(T a,T b){ return a<b? a:b; } 52 T gcd(T a,T b){ return b==0? a:gcd(b,a%b); } 53 T lcm(T a,T b){ return a/gcd(a,b)*b; } 54 55 /////////////////////////////////////////////////////////////////////////// 56 //Add Code: 57 const int maxn=1005; 58 int n; 59 double dist[maxn][maxn],f[maxn][maxn]; 60 61 void Floyd(){ 62 int i,j,k; 63 for(i=1;i<=n;i++){ 64 for(j=1;j<=n;j++) dist[i][j]=f[i][j]; 65 } 66 for(k=1;k<=n;k++){ 67 for(i=1;i<=n;i++){ 68 for(j=1;j<=n;j++){ 69 if(dist[i][k]*dist[k][j]>dist[i][j]) dist[i][j]=dist[i][k]*dist[k][j]; 70 } 71 } 72 } 73 } 74 /////////////////////////////////////////////////////////////////////////// 75 76 int main(){ 77 std::ios::sync_with_stdio(false); 78 //freopen("in.txt","r",stdin); 79 //freopen("out.txt","w",stdout); 80 /////////////////////////////////////////////////////////////////////// 81 //Add Code: 82 int q,i,j,start,end; 83 while(scanf("%d",&n)!=EOF){ 84 for(i=1;i<=n;i++){ 85 for(j=1;j<=n;j++) scanf("%lf",&f[i][j]); 86 } 87 Floyd(); 88 scanf("%d",&q); 89 while(q--){ 90 scanf("%d%d",&start,&end); 91 if(dist[start][end]==0) printf("What a pity!\n"); 92 else printf("%.3lf\n",dist[start][end]); 93 } 94 } 95 /////////////////////////////////////////////////////////////////////// 96 return 0; 97 } 98 99 /************************************************************************** 100 Testcase: 101 Input: 102 3 103 1 0.5 0.5 104 0.5 1 0.4 105 0.5 0.4 1 106 3 107 1 2 108 2 3 109 1 3 110 Output: 111 0.500 112 0.400 113 0.500 114 **************************************************************************/
posted on 2013-10-09 16:02 SCNU20102200088 阅读(157) 评论(0) 编辑 收藏 举报