最短路練習3

2021-10-02 21:08:50 字數 1942 閱讀 6412

mpi maelstrom(裸題+坑你的題意)

輸入長得很難看

無多組因為圖是雙向的,所以只給了圖矩陣的下三角

自己到自己永遠是0,如果這倆點不同就用x來代替

可以用atoi 函式來很好的處理 char str變int ,如果str[0]=『x』;就把對應邊設定為inf;

inf取值0x3f3f3f3f

輸出也坑,讓你找從1到n個的最短路靜的最大值是多少

1->2 3

1->3 7

1->4 9

所以答案是9

**寫的不好看

#include

#include

#include

#include

using namespace std;

#include

#include

const

int inf=

0x3f3f3f3f

;const

int n=

105;

using namespace std;

int n;

char str[33]

;int tu[n]

[n];

int dis[n]

;int vis[n]

;int

dijkstra

(int s)}if

(v==-1

)break

; vis[v]=1

;for

(int i=

1; i<=n; i++)}

int ma=

-inf;

for(

int i=

1; i<=n; i++

)return ma;

}int

main()

else}}

int ma=

dijkstra(1

);cout<}

判斷乙個圖的這叫啥,傳遞閉包

如果每個點都到a點,那麼a點就是乙個確認位置的點

但是我們知道的資訊都是兩兩的,只知道b能到a c能到b 我們怎麼知道每個點是否都能到a呢,我們就可以利用傳遞性 也就是c-》b-》a這種

所以c-》a

可以通過floyd演算法

假設有擊敗關係則邊為1,檢視誰能擊敗自己,以及自己能擊敗誰,通過floyd演算法,可以知道a和任何敵人的擊敗關係,檢視beat[a][x]&&beat[x][a],若都沒有則《確定》兩人沒有比武過,也就是不知道誰能擊敗誰。

a擊敗別人,出度+1,a敗於別人入度+1,沒關係則跳過,遍歷a與任何人的關係,如果a與任何人都有關係,則能確定a的位置,否則,不確定

#include

#include

#include

#include

using namespace std;

#include

#include

const

int inf=

0x3f3f3f3f

;const

int n=

105;

using namespace std;

int n,m;

char str[33]

;int beat[n]

[n];

int win[n]

;int ans=0;

int lose[n]

;void

floyd()

}for

(int i=

1; i<=n; i++

)else

if(beat[j]

[i]==1)

}if(du==n-1)

ans++;}

}int

main()

floyd()

; cout<}

最短路練習2

雙向建邊 注意題意就是去的路和返回來的路可能不是同一條,因為a b和b a的路徑長度不一樣 就是計算兩次dij,在找那個最大的就好了 include include include include using namespace std include include const int inf 0...

練習 最短路徑 深度搜尋

乙個根據深度搜尋模型寫的最短路徑 參考如下 啊哈演算法 4.2 p81 最短路徑 public class shortpath 向右走 向下走 向左走 向上走 地圖是乙個5 5的矩陣 public static int x 5,y 5 定義終點 public static int ex 2,ey 2...

王道機試練習 最短路徑最短花費

給你 n 個點,m 條無向邊,每條邊都有長度 d 和花費 p,給你起點 s 終點 t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花 費最少的。輸入 輸入 n,m,點的編號是 1 n,然後是 m 行,每行 4 個數 a,b,d,p,表示 a 和 b 之間有一條邊,且其長度為 ...