Floyd演算法總結 例題

2021-10-08 16:29:02 字數 2529 閱讀 4560

詳細講解

演算法主體:

for

(k=1

;k<=n;k++

)//所有待加入的中轉點

for(i=

1;i<=n;i++

)for

(j=1

;j<=n;j++)if

(e[i]

[j]>e[i]

[k]+e[k]

[j])

e[i]

[j]=e[i]

[k]+e[k]

[j];

題意:每次刪去乙個點,求當前刪去該點之前的所有邊的最小權值和。

解題思路:每次刪去乙個點,直到把所有點都刪盡。倒過來就相當於每次加入乙個點,求加入該點後所有存在邊的最小權值和,相當於floyd的建立過程。所以逆序使用floyd演算法即可,想把所有直接相連的邊存下來,然後每次加入乙個點(要刪除的點),如果邊的兩邊兩點都已經被新增,那麼ans+=path[i][j]

#include

#include

#include

#include

using

namespace std;

#define maxn 510

#define ll long long

const

int inf =

5e7+

100;

int n;

int a[maxn]

[maxn]

;int vis[maxn]

;int del[maxn]

;ll ans[maxn]

;int

main()

}for

(int i=n;i>=

1;i--

)scanf

("%d"

,&del[i]);

ll sum=0;

for(

int k=

1;k<=n;k++)if

(vis[i]

&&vis[j]

) sum+

=a[i]

[j];}}

ans[k]

=sum;

}for

(int i=n;i>

0;i--

)printf

("%i64d "

,ans[i]);

printf

("\n");

return0;

}

題意:從當前所有邊中找出第k小的邊的權值

解題思路:先在當前存在的所有邊中找到前k小的邊進行儲存,因為數值大小可以達到2e5,所以對它們進行離散化處理,然後對這k條邊進行儲存在圖中,然後進行floyd演算法處理,最後找出flyod演算法建立完的圖的第k小的權值邊即可

#include

#include

#include

#include

#include

using

namespace std;

#define ll long long

const ll inf =

1e18

;int n,m,k;

struct nodeedge[

200100];

ll path[

1010][

1010];

vector v;

int sor[

1010];

map<

int,

int> mp;

bool

cmp1

(node a,node b)

intmain()

sort

(edge+

1,edge+

1+m,cmp1)

;int cnt=1;

for(

int i=

1;i<=minv;i++

)sort

(sor+

1,sor+

1+cnt)

;int pos=

unique

(sor+

1,sor+

1+cnt)

-sor-1;

for(

int i=

1;i<=pos;i++

)for

(int i=

1;i<=pos;i++

)for

(int j=

1;j<=pos;j++

) path[i]

[j]=inf;

for(

int i=

1;i<=minv;i++

)for

(int p=

1;p<=pos;p++)}

}}for(

int i=

1;i<=pos;i++

)sort

(v.begin()

,v.end()

);cout<

}

KMP演算法例題 總結

kmp之前沒學,然後排位賽又有一道題考了這個知識點,這題ac了一列人,就差我乙個.kmp演算法 建立乙個next函式,從而使字串匹配的時間複雜度由o n n 變成o n m 舉個例子 ababcab 和 abbbcabdc 首先建立next陣列,next 0 1 ababcab 10012012就是...

Floyd演算法思想

本來 量如此小的演算法不用出模板了,但是的確思想還是很好的。1.定義概覽 floyd warshall演算法 floyd warshall algorithm 是解決任意兩點間的最短路徑的一種演算法,可以正確處理有向圖或負權的最短路徑問題,同時也被用於計算有向圖的傳遞閉包。floyd warshal...

Floyd演算法簡介

演算法定義 floyd warshall演算法 floyd warshall algorithm 是解決任意兩點間的最短路徑的一種演算法,可以正確處理有向圖或負權的最短路徑問題,同時也被用於計算有向圖的傳遞閉包。floyd warshall演算法的時間複雜度為o n 3 空間複雜度為o n2 演算法...