HDU-2807 The Shortest Path 最短路
2013-10-21 22:59
453 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2807
题意:
给你n个矩阵 如果矩阵a*b = c 则 a 与 c 有路
思路:
最短路 难点是怎么把处理数据 只会暴力 5个for =。=
注意 矩阵 a b c 不能相等
题意:
给你n个矩阵 如果矩阵a*b = c 则 a 与 c 有路
思路:
最短路 难点是怎么把处理数据 只会暴力 5个for =。=
注意 矩阵 a b c 不能相等
#include<stdio.h> #include<iostream> #include<string.h> #include<queue> #include<string> #include<vector> using namespace std; const int maxn = 85; const int inf = 1<<28; int n,m; int matrix[maxn][maxn][maxn]; int dis[maxn]; bool vis[maxn]; vector<int>map[maxn]; typedef pair<int,int>pii; void Dijstra( int x ) { priority_queue<pii,vector<pii>,greater<pii> >que; memset( vis,0,sizeof(vis) ); for( int i = 1; i <= n; i ++ ) dis[i] = inf; dis[x] = 0; que.push( make_pair(dis[x],x) ); while( !que.empty() ) { pii u = que.top(); que.pop(); int v = u.second; if( vis[v] ) continue; vis[v] = true; for( int i = 0; i < map[v].size(); i ++ ) { int g = map[v][i]; if( dis[g] > dis[v] + 1 ) { dis[g] = dis[v] + 1; que.push( make_pair( dis[g],g ) ); } } } } void fun() { for( int k1 = 1; k1 <= n; k1 ++ ) { for( int k2 = 1; k2 <= n; k2 ++ ) { if( k1 == k2 ) continue; int cnt[maxn][maxn]; for( int i = 1; i <= m; i ++ ) { for( int j = 1; j <= m; j ++ ) { int sum = 0; for( int h = 1; h <= m; h ++ ) sum += matrix[k1][i][h] * matrix[k2][h][j]; cnt[i][j] = sum; } } for( int k3 = 1; k3 <= n; k3 ++ ) { if( k3 == k1 || k3 == k2 ) continue; int flag = 1; for( int i = 1; i <= m && flag; i ++ ) { for( int j = 1; j <= m; j ++ ) { if( matrix[k3][i][j] != cnt[i][j] ) { flag = 0; break; } } } if( flag ) { map[k1].push_back(k3); } } } } } int main() { //freopen( "data.in","r",stdin ); while( scanf("%d%d",&n,&m) == 2 && ( n||m ) ) { for( int i = 0; i <= n; i ++ ) map[i].clear(); for( int k = 1; k <= n; k ++ ) { for( int i = 1; i <= m; i ++ ) { for( int j = 1; j <= m; j ++ ) { scanf("%d",&matrix[k][i][j]); } } } fun(); int q,s,e; scanf("%d",&q); for( int i = 1; i <= q; i ++ ) { scanf("%d%d",&s,&e); Dijstra(s); if( dis[e] == inf ) puts("Sorry"); else printf("%d\n",dis[e]); } } return 0; }
相关文章推荐
- 【HDU】2807 The Shortest Path 最短路
- HDU 2807 The Shortest Path 矩阵运算+最短路
- HDU 2807 The Shortest Path(最短路构造+Floyed算法)
- HDU 2807 The Shortest Path 【最短路 + 快速判断矩阵是否相等】
- hdu 2807 The Shortest Path(最短路)
- HDU 4725 The Shortest Path in Nya Graph-【SPFA最短路】
- HDU 2807 The Shortest Path(3维矩阵转2维)
- HDU 4725 The Shortest Path in Nya Graph [构造 + 最短路]
- hdu 2807 The Shortest Path
- 【HDU】4725 The Shortest Path in Nya Graph 最短路
- HDU 4725 The Shortest Path in Nya Graph(拆点+最短路)
- HDU-2807-The Shortest Path
- HDU The Shortest Path 矩阵的最短路
- hdu 4725 The Shortest Path in Nya Graph(堆+dij,最短路,5级)
- The Shortest Path in Nya Graph HDU - 4725(最短路,spfa)
- hdu 4725 The Shortest Path in Nya Graph(堆+dij,最短路,5级)
- HDU 4725 The Shortest Path in Nya Graph-【SPFA最短路】
- hdu 2807 The Shortest Path【暴力/矩阵判等优化+Floyd】
- 【最短路】 HDU 4725 The Shortest Path in Nya Graph
- HDU 4725 The Shortest Path in Nya Graph (最短路)