hdu4370 dijkstra矩阵转单向边最短路矩阵+自环闭环
Posted zsben991126
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu4370 dijkstra矩阵转单向边最短路矩阵+自环闭环相关的知识,希望对你有一定的参考价值。
/*
矩阵太神奇了Orz,网上的题解大多是spfa,不过我发想dijkstra也能做
把n*n的矩阵看成是单向边距离矩阵就行
*/
#include<iostream> #include<cstring> #include<cstdio> #include<queue> #define MAXN 500 #define INF 1<<30 using namespace std; int a[MAXN][MAXN]; int n; int dist[MAXN],vis[MAXN]; int dijkstra(int s,int t){ memset(dist,0,sizeof dist); memset(vis,0,sizeof vis); for(int i=0;i<=n;i++) if(i==s) dist[i]=INF; else dist[i]=a[s][i]; while(1){ int k=-1; int Min=INF; for(int i=1;i<=n;i++) if(!vis[i]&&dist[i]<Min){ Min=dist[i]; k=i; } if(k==-1) break; vis[k]=true; for(int i=1;i<=n;i++) if(!vis[i]&&dist[i]>dist[k]+a[k][i]) dist[i]=dist[k]+a[k][i]; } return dist[t]; } int main(){ while(scanf("%d",&n)==1){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]); printf("%d ",min(dijkstra(1,n),dijkstra(1,1)+dijkstra(n,n))); } return 0; }
以上是关于hdu4370 dijkstra矩阵转单向边最短路矩阵+自环闭环的主要内容,如果未能解决你的问题,请参考以下文章
[CSUOJ1808] 地铁(dijkstra,堆,边最短路)