Floyd 限制路徑步數(快速冪優化)

2021-08-20 05:26:58 字數 1120 閱讀 8088

最短路可以採用floyd來計算,但是限制時間在1s內,估計直接寫會超時,所以要用到快速冪來優化。

快速冪的思想是:xy

=xy/

2∗2 xy=

xy/2

∗2所以每次劃分下去尋找最短路

(其實我也沒完全想清楚,就不講太清楚了,怕講錯)

//status:c++_ac_125ms_1204kb

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define ll __int64

#define pii pair

#define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)

#define mem(a,b) memset(a,b,sizeof(a))

#define lson l,mid,rt<<1

#define rson mid+1,r,rt<<1|1

const int n=210,m=1000000,inf=0x3f3f3f3f,mod=1999997;

const ll llnf=0x3f3f3f3f3f3f3f3fll;

const double dnf=100000000;

int f[n*10],w[n][n];

int nt,n,m,s,t;

struct matrix

}mta,mtb;

int pow(int k)

return mtb.ma[f[s]][f[t]];

}int main()

printf("%d\n",pow(nt));

}return

0;}

最短路徑 Floyd

簡介 floyd演算法又稱為插點法,是一種利用動態規劃的思想尋找給定的加權圖中多源點之間最短路徑的演算法,與dijkstra演算法類似。該演算法名稱以創始人之一 1978年圖靈獎獲得者 史丹福大學電腦科學系教授羅伯特 弗洛伊德命名。樣例求解 示例 include include using name...

DFS實現迷宮,列印路徑輸出步數

問題描述 直接給 吧,中的注釋寫的很詳細了。include includeusing namespace std int m,n 行 列 int map 81 81 迷宮 int vis 81 81 標記是否訪問過 int next step 4 2 訪問的四個方向,右下左上 int count 記...

floyd演算法(最短路徑)

最短路徑 描述 已知乙個城市的交通路線,經常要求從某一點出發到各地方的最短路徑。例如有如下交通圖 則從a出發到各點的最短路徑分別為 b 0c 10 d 50 e 30 f 60 輸入 輸入只有乙個用例,第一行包括若干個字元,分別表示各頂點的名稱,接下來是乙個非負的整數方陣,方陣維數等於頂點數,其中0...