hdu-----(2807)The Shortest Path(矩阵+Floyd)
The Shortest Path
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2440 Accepted Submission(s): 784
are N cities in the country. Each city is represent by a matrix size of
M*M. If city A, B and C satisfy that A*B = C, we say that there is a
road from A to C with distance 1 (but that does not means there is a
road from C to A).
Now the king of the country wants to ask me some problems, in the format:
Is there is a road from city X to Y?
I have to answer the questions quickly, can you help me?
test case contains a single integer N, M, indicating the number of
cities in the country and the size of each city. The next following N
blocks each block stands for a matrix size of M*M. Then a integer K
means the number of questions the king will ask, the following K lines
each contains two integers X, Y(1-based).The input is terminated by a
set starting with N = M = 0. All integers are in the range [0, 80].
each test case, you should output one line for each question the king
asked, if there is a road from city X to Y? Output the shortest distance
from X to Y. If not, output "Sorry".
1 1
2 2
1 1
1 1
2 2
4 4
1
1 3
3 2
1 1
2 2
1 1
1 1
2 2
4 3
1
1 3
0 0
Sorry
- #include<cstdio>
- #include<cstring>
- #define inf 0x3f3f3f3f
- using namespace std;
- const int maxn=;
- int arr[maxn][maxn][maxn];
- int ans[maxn][maxn];
- int tem[maxn][maxn];
- int n,m,w;
- void init(int a[][maxn])
- {
- for(int i=;i<=n;i++) //城市初始化
- {
- for(int j=;j<=n;j++)
- {
- if(i==j)a[i][j]=;
- else a[i][j]=inf;
- }
- }
- }
- void floyd(int a[][maxn]) //运用floyd算法求城市间的最短路径
- {
- for(int k=;k<=n;k++)
- {
- for(int i=;i<=n;i++)
- {
- for(int j=;j<=n;j++)
- {
- if(ans[i][j]>ans[i][k]+ans[k][j])
- ans[i][j]=ans[i][k]+ans[k][j];
- }
- }
- }
- }
- void Matrix(int a[][maxn],int p1,int p2)
- {
- for(int i=;i<=m;i++)
- {
- for(int j=;j<=m;j++)
- {
- a[i][j]=; // init()
- for(int k=;k<=m;k++)
- {
- a[i][j]+=arr[p1][i][k]*arr[p2][k][j];
- }
- }
- }
- }
- void work()
- {
- int t1,t2,t3;
- for(int i=;i<=n;i++)
- {
- for(int j=;j<=n;j++)
- {
- if(i==j) continue; //a,b 两数组不能相同
- Matrix(tem,i,j); //两个矩阵相乘
- for(t1=;t1<=n;t1++)
- {
- //a,b,c三数组不能相同
- if(t1!=i&&t1!=j)
- {
- for( t2=;t2<=m;t2++)
- {
- for(t3=;t3<=m;t3++)
- {
- //得到的结果相比较
- if(tem[t2][t3]!=arr[t1][t2][t3])
- goto loop;
- }
- }
- loop:
- if(t3>m)
- ans[i][t1]=;
- }
- }
- }
- }
- }
- int main()
- {
- int a,b;
- while(scanf("%d%d",&n,&m)&&n+m!=)
- {
- for(int i=;i<=n;i++)
- for(int j=;j<=m;j++)
- for(int k=;k<=m;k++)
- scanf("%d",&arr[i][j][k]);
- init(ans);
- work();
- floyd(ans);
- scanf("%d",&w);
- while(w--)
- {
- scanf("%d%d",&a,&b);
- if(ans[a][b]==inf)
- printf("Sorry\n");
- else
- printf("%d\n",ans[a][b]);
- }
- }
- return ;
- }
hdu-----(2807)The Shortest Path(矩阵+Floyd)的更多相关文章
- hdu 2807 The Shortest Path(矩阵+floyd)
The Shortest Path Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- hdu 2807 The Shortest Path
http://acm.hdu.edu.cn/showproblem.php?pid=2807 第一次做矩阵乘法,没有优化超时,看了别人的优化的矩阵乘法,就过了. #include <cstdio ...
- Hdu 4725 The Shortest Path in Nya Graph (spfa)
题目链接: Hdu 4725 The Shortest Path in Nya Graph 题目描述: 有n个点,m条边,每经过路i需要wi元.并且每一个点都有自己所在的层.一个点都乡里的层需要花费c ...
- HDU 4725 The Shortest Path in Nya Graph [构造 + 最短路]
HDU - 4725 The Shortest Path in Nya Graph http://acm.hdu.edu.cn/showproblem.php?pid=4725 This is a v ...
- hdu 3631 Shortest Path(Floyd)
题目链接:pid=3631" style="font-size:18px">http://acm.hdu.edu.cn/showproblem.php?pid=36 ...
- HDU 2224 The shortest path
The shortest path Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- HDU 4725 The Shortest Path in Nya Graph
he Shortest Path in Nya Graph Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged o ...
- (中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。
Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...
- HDU 4725 The Shortest Path in Nya Graph(构图)
The Shortest Path in Nya Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
随机推荐
- js对数组排序
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CodeForces 496B Secret Combination
Secret Combination Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u ...
- mysql中bigint、int、mediumint、smallint 和 tinyint的取值范围
mysql数据库设计,其中,对于数据性能优化,字段类型考虑很重要,搜集了些资料,整理分享出来,这篇为有关mysql整型bigint.int.mediumint.smallint 和 tinyint的语 ...
- JS学习笔记(二) 数据类型
参考资料: 1. http://www.w3school.com.cn/js/js_datatypes.asp 2. http://blog.sina.com.cn/s/blog_85c1dc1001 ...
- GIMP学习笔记
参考文献: ① http://www.gimp.org/docs/userfaq.html GIMP是GNU Image Manipulation Program的缩写,sired by Spence ...
- 访问Google搜索,Google学术镜像搜索
Google学术镜像搜索:http://dir.scmor.com/google/ 不用FQ也能访问谷歌搜索网站,让我们一起Google 不用FQ也能访问谷歌搜索网站,让我们一起Google(摘自:h ...
- Java I/O NIO学习
给出一个学习的链接讲的很全.. http://ifeve.com/java-nio-all/ 上边的是中文翻译的这里是原地址:http://tutorials.jenkov.com/java-nio/ ...
- EntityManager方法简介
EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满足条件的实体Bean.实体B ...
- Windows Live Writer编写Octopress
Windows live Writer是一个可以用来离线编写,并发布博客的工具. Octopress是一个静态博客生成系统.使用群体多是geek,主要有显示代码清晰,git同步,并且不用购买空间的特点 ...
- 禁止ubuntu的super快捷键
在mac上安装了ubuntu虚拟机, 但是发现command健(ubuntu中叫super健)被系统占用了, 习惯了command健的同学来说非常不方便, 如何禁用默认的command健呢? You ...