图的顶点可达闭包
Posted szu-ds-wys
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的顶点可达闭包相关的知识,希望对你有一定的参考价值。
题目描述
给定有向图的邻接矩阵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*,元素之间由空格分开
样例输入
4 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0
样例输出
0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0
提示
#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; }
以上是关于图的顶点可达闭包的主要内容,如果未能解决你的问题,请参考以下文章