Hdu2807The Shortest Path矩阵
矩阵相乘,判断之后建图。 注意 A B C三个互不相同的城市
#include <cstdio> #include <algorithm> #include <iostream> #include <string.h> typedef long long LL; using namespace std; const int INF = 0xfffffff; struct Matrix { int m[200][200]; }a[1111]; int Map[200][200]; Matrix Mul(Matrix a, Matrix b,int n) { Matrix ans; for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ ans.m[i][j] = 0; for (int k = 0; k < n; k++){ ans.m[i][j] += a.m[i][k] * b.m[k][j]; } } } return ans; } int judge(Matrix a, Matrix b, int n) { for(int i =0;i<n;i++) for(int j=0;j<n;j++) if(a.m[i][j]!=b.m[i][j]) return 0; return 1; } void floyd(int n) { for (int k = 0; k < n;k++) for (int i = 0; i < n; i++){ for (int j = 0; j < n;j++){ if(i==j||j==k) continue; Map[i][j] = min(Map[i][k] + Map[k][j], Map[i][j]); } } } void show(Matrix a,int n) { for(int i =0;i<n;i++){ for(int j =0 ;j<n;j++) printf("%d ",a.m[i][j]); printf("\n"); } } int main() { int n, m; while (scanf("%d%d",&n,&m), n || m){ for (int i = 0; i < n; i++){ for (int j = 0; j < m;j++) for (int k = 0; k < m; k++) scanf("%d", &a[i].m[j][k]); } for(int i = 0 ;i<n;i++) for(int j=0;j<n;j++) Map[i][j]=INF; for (int i = 0; i < n;i++) for (int j = 0; j < n;j++){ Matrix ans = Mul(a[i], a[j],m); for (int k = 0; k < n; k++){ if (judge(ans, a[k],m))Map[i][k] = 1; } } floyd(n); int k; scanf("%d",&k); while (k--){ int b; int c; scanf("%d%d", &b, &c); b--; c--; if (Map[b][c]==INF){ printf("Sorry\n"); } else printf("%d\n", Map[b][c]); } } return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥