Week7 A TT 的魔法貓(Floyd)

2021-10-24 00:18:32 字數 989 閱讀 2500

問題描述:

n個人玩乙個遊戲,每兩個人都要進行一場比賽。

已知m個勝負關係,每個關係為a b,表示a比b強,勝負關係具有傳遞性。

試問有多少場比賽的勝負無法預先得知?

1≤n,m≤500

解題思路:

1.勝負關係具有傳遞性,可以用floyd演算法求出任意兩點的勝負關係(傳遞閉包)。

2.d[i][j]=max(d[i][j],d[i][k]&d[k][j]);單次迴圈中,i,j相互連線條件:直接相連,或者通過k相連。遍歷一遍k,過程中,i,j可能通過多個k間接相連。(floyd演算法)

3.剪枝:一次迴圈中,如果i不能與k相連,則不必要考慮k與j相連。

3.輸出判斷:dis[a][b] = 1表示a比b強;dis[a][b] = 0表示a與b勝負關係不明;dis[a][b]=0且dis[b][a] = 0表示a與b勝負關係無法預先判斷。

**實現:

#include

#include

#include

using

namespace std;

int d[

505]

[505];

intmain()

for(

int k=

1; k<=n; k++

)for

(int i=

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

(d[i]

[k]!=0)

for(

int i=

1; i<=n; i++

)for

(int j=i+

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

(d[i]

[j]==

0&& d[j]

[i]==0)

ans++

; cout<}}

WEEK7 A TT的魔法貓

眾所周知,tt 有乙隻魔法貓。這一天,tt 正在專心致志地玩 貓和老鼠 遊戲,然而比賽還沒開始,聰明的魔法貓便告訴了 tt 比賽的最終結果。tt 非常詫異,不僅詫異於他的小貓咪居然會說話,更詫異於這可愛的小不點為何有如此魔力?魔法貓告訴 tt,它其實擁有一張遊戲勝負表,上面有 n 個人以及 m 個勝...

程式設計Week7 A TT的魔法貓

給定一張遊戲勝負表,上面有 n 個人以及 m 個勝負關係,每個勝負關係為 a b,表示 a 能勝過 b,且勝負關係具有傳遞性。即 a 勝過 b,b 勝過 c,則 a 也能勝過 c。求有多少選手的勝負關係不能 第一行給出資料組數。每組資料第一行給出 n 和 m n m 500 接下來 m 行,每行給出...

week7 作業A TT的魔法貓

眾所周知,tt 有乙隻魔法貓。這一天,tt 正在專心致志地玩 貓和老鼠 遊戲,然而比賽還沒開始,聰明的魔法貓便告訴了 tt 比賽的最終結果。tt 非常詫異,不僅詫異於他的小貓咪居然會說話,更詫異於這可愛的小不點為何有如此魔力?魔法貓告訴 tt,它其實擁有一張遊戲勝負表,上面有 n 個人以及 m 個勝...