如何判别一个有向图中是否有环路
1、a可以,深搜万能,就是时间有点那个b当然可以,拓朴排序本来就是在无环图才有解的C.求最短路径,这个..一般不行,不过你用floyd修改我也无语了,可以,但时间代价有点大D.广度优先遍历,这个。。应该也可以吧,就是只要队列重复就有环,不过判断很麻烦,得细细做才能出来。用宽搜是不是有点大材小用?单选选B因为B是基础的就可以,不需修改
2、#include"utility.h"#include"adj_matrix_undir_graph.h"#include"adj_list_dir_graph.h"#include"dfs.h"#include"bfs.h"int main(void){ int n,j=0,i=0; int m,e,b=0; char vexs[20],c; char nums[20];
3、cout<<"输入无向图的顶点个数n:"<<endl; cin>>n; cout<<"输入顶点元素:"<<endl; for(i=0;i<n;i++) { cout<<"请输入第"<<j<<"个结点"<<endl; cin>>vexs[i]; j++; }
4、cout<<"输出无向图的邻接矩阵:"<<endl; AdjMatrixUndirGraph<char> aundir(vexs,n); for(i=0;i<n;i++)
5、{ for(int v=1;v<n;v++) { cout<<"输入Y/N,是否插入边:"; cin>>c; if(c == 'Y' ) aundir.InsertEdge(i,v); } } Display(aundir);
6、cout<<"请输入有向图的顶点个数m:"; cin>>m; for(int a=0;a<m;a++) { cout<<"输入第"<<b<<"个顶点数据"; cin>>nums[a]; b++; } AdjListDirGraph<char> dir(nums,m); for(int k=0;k<m;k++)
7、{ for(e=0;e<m;e++) { 罕铞泱殳cout<<"是否插入边V媪青怍牙"<<k<<",V"<<e<<":"; cin>>c; if(c == 'Y' ) dir.InsertEdge(k,e); } } Display(dir); cout<<"无向图的深度遍历:"; DFSTraverse<char>(aundir,Write<char>); cout<<endl; cout<<"无向图的广度遍历:"; BFSTraverse<char>(aundir,Write<char>);
8、cout<<endl; cout<<"有向图的深度遍历:"; DFSTraverse<char>(dir,Write<char>); cout<<endl; cout<<"有向图的广度遍历:"; BFSTraverse<char>(dir,Write<char>);