如何判断有向图是否存在环路?图是用邻接矩阵来存储的
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/04 03:55:06
![如何判断有向图是否存在环路?图是用邻接矩阵来存储的](/uploads/image/z/10136949-69-9.jpg?t=%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%AD%E6%9C%89%E5%90%91%E5%9B%BE%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%E7%8E%AF%E8%B7%AF%3F%E5%9B%BE%E6%98%AF%E7%94%A8%E9%82%BB%E6%8E%A5%E7%9F%A9%E9%98%B5%E6%9D%A5%E5%AD%98%E5%82%A8%E7%9A%84)
如何判断有向图是否存在环路?图是用邻接矩阵来存储的
如何判断有向图是否存在环路?图是用邻接矩阵来存储的
如何判断有向图是否存在环路?图是用邻接矩阵来存储的
#include"utility.h"
#include"adj_matrix_undir_graph.h"
#include"adj_list_dir_graph.h"
#include"dfs.h"
#include"bfs.h"
int main(void)
{
\x09int n,j=0,i=0;
\x09int m,e,b=0;
\x09char vexs[20],c;
\x09char nums[20];
\x09cout<<"输入无向图的顶点个数n:"<<endl;
\x09cin>>n;
\x09cout<<"输入顶点元素:"<<endl;
\x09for(i=0;i<n;i++)
\x09{
\x09\x09cout<<"请输入第"<<j<<"个结点"<<endl;
\x09\x09cin>>vexs[i];
\x09\x09j++;
\x09}
\x09
\x09cout<<"输出无向图的邻接矩阵:"<<endl;
\x09AdjMatrixUndirGraph<char> aundir(vexs,n);
\x09for(i=0;i<n;i++)
\x09{
\x09\x09for(int v=1;v<n;v++)
\x09\x09{
\x09\x09\x09cout<<"输入Y/N,是否插入边:";
\x09\x09\x09cin>>c;
\x09\x09\x09if(c == 'Y' )
\x09\x09\x09\x09aundir.InsertEdge(i,v);
\x09\x09}
\x09}
\x09Display(aundir);
\x09
\x09cout<<"请输入有向图的顶点个数m:";
\x09cin>>m;
\x09for(int a=0;a<m;a++)
\x09{
\x09\x09cout<<"输入第"<<b<<"个顶点数据";
\x09\x09cin>>nums[a];
\x09\x09b++;
\x09}
\x09AdjListDirGraph<char> dir(nums,m);
for(int k=0;k<m;k++)
\x09{
\x09\x09for(e=0;e<m;e++)
\x09\x09{
\x09\x09\x09cout<<"是否插入边V"<<k<<",V"<<e<<":";
\x09 \x09cin>>c;
if(c == 'Y' )
\x09\x09\x09\x09dir.InsertEdge(k,e);
\x09\x09}
\x09}
\x09Display(dir);
\x09cout<<"无向图的深度遍历:";
\x09DFSTraverse<char>(aundir,Write<char>);
\x09cout<<endl;
\x09cout<<"无向图的广度遍历:";
BFSTraverse<char>(aundir,Write<char>);
\x09
\x09cout<<endl;
\x09cout<<"有向图的深度遍历:";
\x09DFSTraverse<char>(dir,Write<char>);
\x09cout<<endl;
\x09cout<<"有向图的广度遍历:";
BFSTraverse<char>(dir,Write<char>);