題目大意:
有T條路,從s到e走n步,求最短路徑。
思路:
看了別人的。。。
先看一下Floyd的核心思想: edge[i][j]=min(edge[i][j],edge[i][k]+edge[k][j])
i到j的最短路是i到j的直接路徑或者經過k點的間接路徑,但是矩陣的更新總是受到上一次更新的影響
如果每次的更新都存進新矩陣,那麼edge[i][k]+edge[k][j]是不是表示只經過三個點兩條邊的路徑呢?
min(edge[i][j],edge[i][k]+edge[k][j])就表示只經過三個點兩條邊的最短路。
#include#include #include using namespace std; typedef long long LL; const int MAXN=256; const int INF=0x3fffffff; int num[MAXN<<2]; int n,t,s,e,cnt; struct Matrix { LL data[MAXN][MAXN]; Matrix() { for(int i=0;i >=1; } } int main() { cnt=0; scanf(%d%d%d%d,&n,&t,&s,&e); int from,to,val; memset(num,-1,sizeof(num)); for(int i=0;i