[矩乘]K步最短路

来源:互联网 发布:sql server trigger 编辑:程序博客网 时间:2024/06/05 15:46

题目大意:    给出一张无向连通图,求S到E经过k条边的最短路。


把矩乘换成floyd ..


#include<iostream>#include<cstdio>using namespace std;const int INF=9999999;int n,k,S,T;string m;struct mat{int m[101][101];}unit,a;mat mul(mat a,mat b){mat t;for(int i=0;i<n;++i)for(int j=0;j<n;++j)t.m[i][j]=INF;for(int k=0;k<n;++k)for(int i=0;i<n;++i)for(int j=0;j<n;++j){if(t.m[i][j]>a.m[i][k]+b.m[k][j])t.m[i][j]=a.m[i][k]+b.m[k][j];}return t;}mat pow(mat a,int b){mat r=unit;while(b){if(b&1)r=mul(r,a);a=mul(a,a);b>>=1;}return r;}int main(){scanf("%d %d %d %d",&n,&S,&T,&k);S--,T--;for(int i=0;i<n;++i)for(int j=0;j<n;++j){unit.m[i][j]=INF;scanf("%d",&a.m[i][j]);if(a.m[i][j]==-1)a.m[i][j]=INF;}for(int i=0;i<n;++i)unit.m[i][i]=0;mat r=pow(a,k);printf("%d",r.m[S][T]);return 0;}


原创粉丝点击