C++基于DFS算法的图的遍历问题求解课程设计 2

2026/4/24 4:20:36

int eNum; /*边的个数 */

int visited[maxnum]; /*标记这个顶点是否被访问过,0表示没有,1表示已经被访问过*/

public:

void graph(int a,int b); /*构造函数 */

int InitGraph(); /*图类的初始化函数*/ void print(); /*输出邻接矩阵 */ void dfs(int i); /*深度优先搜索 */ void DFS();}

4.2 类的成员函数设计

/*构造函数*/

void Graph::graph(int a,int b)

{

cout<<\创建顶点数为\边数\的无向图\ vNum=a; eNum=b; /*为了防止原先存在e[][]中的数据对今后的搜索造成影响,所以对其进行初始化*/ for(int i=0;i< vNum;i++) { for(int j=0;j< vNum;j++) {e[i][j] = 0; } } }

int Graph::InitGraph() {

int i,j,temp,flag=0; for (i=0;i>v[i]; }

/*输入各个边的具体情况*/

cout<<\请输入各个边的权值\ for (i=0;i

第 4 页 共 21 页

cin>>temp; e[i][j]=temp; e[j][i]=temp; if(temp)flag++; if(flag==eNum) { cout<<\初始化无向图邻接矩阵完毕\ return 0; } } }

return 1; }

/*输出邻接矩阵*/ void Graph::print() {

cout<<\邻接矩阵为\ int i,j;

for (i=0;i

/*深度优先搜索*/ void Graph::dfs(int i) {

cout<

visited[i]=1; /*标记i边已经被访问*/

for(int j=0;j

{

if((e[i][j]!=0)&&(visited[j]==0)) /*假如j点与i点相连,并且j点还没有被访问

过*/

{dfs(j); } /*递归方法,对j点进行深度优先搜索*/ } }

void Graph::DFS() {

int i; /*首先把所有点都设置成没有访问过 */ for(i=0;i

第 5 页 共 21 页

visited[i]=0;

} /*深度优先搜索*/ for(i=0;i

{ if(visited[i]==0)

{ /*假如i点没有被访问过*/

dfs(i); /*对以邻接矩阵表示的图,以序号为i的顶点为出发点进行DFS*/ } }

cout<

4.3 主函数设计

int main()

{ /*以下两个语句用来建立用邻接矩阵表示的图*/ Graph graph(4,3);

graph.InitGraph(); /*创建图*/ graph.print();

cout<<\深度优先搜索的结果:\ graph.DFS(); return 0; }

5、基于控制台的应用程序设计

5.1 程序运行结果

程序运行结果如图1所示。

第 6 页 共 21 页

图1程序运行结果

5.2运行结果分析

程序运行后首先创建了图类的对象,调用构造函数,产生一个顶点数为5,边数为

6的无向图,然后初始化这个图,从键盘输入每个顶点的信息(a b c d e)和每条边的权值。在主函数中直接调用邻接矩阵输出函数和深度优先搜索结果。

6、基于MFC的图形界面程序开发

MFC的图形界面程序设计可在上述类设计的基础上进行改造,MFC的图形界面程序与DOS界面程序的主要不同点是:MFC图形界面程序与DOS界面程序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主要通过cin,cout等I/O流实现,而MFC的图形程序界面采用标准Windows窗口和控件实现输入输出,因此必须在MFC类的框架下加入上面所设计的图类,并通过图形界面的输入输出改造来完成。

第 7 页 共 21 页


C++基于DFS算法的图的遍历问题求解课程设计 2.doc 将本文的Word文档下载到电脑
搜索更多关于: C++基于DFS算法的图的遍历问题求解课程设计 2 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219