码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 4034 逆向floyd

时间:2015-03-03 23:34:51      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

给出一个最短路邻接矩阵,求出构图的最小边数

正常的floyd的k放在最外面是为了防止i到j的距离被提前确定,而逆向的floyd,i到j的距离已经确定,所以需要在i到j之间枚举k

Sample Input

3
3
0 1 1
1 0 1
1 1 0
3
0 1 3 
4 0 2
7 3 0
3
0 1 4
1 0 2
4 2 0

Sample Output
Case 1: 6
Case 2: 4
Case 3: impossible
 1 #include<stdio.h>
 2 const int MAXN=110;
 3 int map[MAXN][MAXN];
 4 int ans;//至少需要的边数
 5 int n;//点数 
 6 int Solve()
 7 {
 8     for(int i=0;i<n;i++)
 9       for(int j=0;j<n;j++)
10          for(int k=0;k<n;k++)
11          {
12              if(i!=j&&j!=k&&i!=k)
13              {
14                  if(map[i][j]==map[i][k]+map[k][j])
15                  {
16                      ans--;//这条边可以不需要的    
17                      break;
18                  }    
19                  if(map[i][j]>map[i][k]+map[k][j]) 
20                     return 0;//不可能的情况 
21              }    
22          }    
23     return 1;
24 }     
25 int main()
26 {
27     int T;
28     scanf("%d",&T);
29 
30     while(T--)
31     {
32         scanf("%d",&n);
33         for(int i=0;i<n;i++)
34           for(int j=0;j<n;j++)
35             scanf("%d",&map[i][j]);
36        
37         ans=n*(n-1);//最多的边数
38         if(Solve())
39         {
40             printf("%d\n",ans);
41         }     
42         else printf("impossible\n");
43     }    
44     return 0;
45 }

 

hdu 4034 逆向floyd

标签:

原文地址:http://www.cnblogs.com/cnblogs321114287/p/4312121.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!