Floyd演算法求圖的傳遞閉包
阿新 • • 發佈:2019-01-31
Floyd演算法的一個應用吧
/* 設R是非空集合上的關係,R的傳遞閉包是A上的關係R',使得R'滿足以下條件: 1)、R'是傳遞的 2)、R是R'的子集 3)、對A上的任何包含R的傳遞關係R'',有 R'是R''的子集 下面是用Folyd-Warshall演算法來解 */ #include <iostream> using namespace std; int main() { int vexnum,arcnum; int graph[20][20]; int i,j,k,a,b; cout<<"輸入有向圖的頂點數和邊數:"; cin>>vexnum>>arcnum; for(i=0;i<=vexnum;i++) for(j=0;j<=vexnum;j++) { if(i == j) graph[i][j]=1; else graph[i][j]=0; } for(i=1;i<=arcnum;i++) { cout<<"輸入第 "<<i<<" 條邊的起點,終點: "; cin>>a>>b; graph[a][b]=1; } //求傳遞閉包 for(k=1;k<=vexnum;k++) for(i=1;i<=vexnum;i++) for(j=1;j<=vexnum;j++) { graph[i][j] += graph[i][k]*graph[k][j]; } for(i=1;i<=vexnum;i++) { for(j=1;j<=vexnum;j++) { if(graph[i][j]) cout<<1<<" "; else cout<<0<<" "; } cout<<endl; } return 0; }