傳遞閉包
阿新 • • 發佈:2022-04-08
傳遞閉包
從數學上來說,傳遞閉包是在集合X上求包含關係R關係。從關係圖的角度來說,就是如果原關係圖上有x到y,則其傳遞閉包的關係圖上就應有x從到y的邊。通俗地講,就是確定每個點是否能到達其他每個點。
for (int k = 1; k <= n; ++k)
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
if (E[i][k] && E[k][j])
E[i][j] = 1;
這道題判斷是否有點無法通過其他的點訪問,即E[i][j] == 0 && E[j][i] == 0
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int n, m; int mp[110][110]; int main() { while(cin >> n >> m) { memset(mp, 0, sizeof mp); while(m--) { int a, b; cin >> a >> b; mp[a][b] = 1; } for(int k = 1; k <= n; k++) { for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(mp[i][k] && mp[k][j]) mp[i][j] = 1; } } } int ans = 0; //判斷孤島 for(int i = 1; i <= n; i++) { int flag = 1; for(int j = 1; j <= n; j++) if(i != j && !mp[i][j] && !mp[j][i]) flag = 0; ans += flag; } cout << ans << endl; } return 0; }