给定有向图的邻接矩阵A,其元素定义为:若存在顶点i到顶点j的有向边则A[i,j]=1,若没有有向边则A[i,j]= 0。试求A的可达闭包矩阵A*,其元素定义为:若存在顶点i到顶点j的有向路径则A*[i,j]=1,若没有有向路径则A*[i,j]= 0。
标签:有向图 clu 邻接矩阵 color mes ios div main oid
给定有向图的邻接矩阵A,其元素定义为:若存在顶点i到顶点j的有向边则A[i,j]=1,若没有有向边则A[i,j]= 0。试求A的可达闭包矩阵A*,其元素定义为:若存在顶点i到顶点j的有向路径则A*[i,j]=1,若没有有向路径则A*[i,j]= 0。
第1行顶点个数n
第2行开始的n行有向图的邻接矩阵,元素之间由空格分开
有向图的可达闭包矩阵A*,元素之间由空格分开
#include<iostream> using namespace std; #define Maxlen 50 void change(int n,int m[Maxlen][Maxlen]) { for(int k=0;k<n;k++) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(m[i][j]==0&&m[i][k]==1&&m[k][j]==1) m[i][j]=1; } } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(j==0) cout<<m[i][j]; else cout<<" "<<m[i][j]; } cout<<endl; } } int main() { int T; T=1; while(T--) { int n; cin>>n; int m[Maxlen][Maxlen]; for(int i=0;i<Maxlen;i++) for(int j=0;j<Maxlen;j++) m[i][j]=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>m[i][j]; change(n,m); } return 0; }
标签:有向图 clu 邻接矩阵 color mes ios div main oid
原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12181111.html