C++ 图 栈 深度优先搜索问题

本文详细介绍了如何使用C++实现图的深度优先搜索(DFS)算法,包括图的表示方法、DFS的递归和非递归实现,以及在解决实际问题中的应用示例。
摘要由CSDN通过智能技术生成

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
	freopen("DFS.in","r",stdin);
	freopen("DFS.out","w",stdout);
//freopen文件输入输出,DFS是深度优先搜索的简称 
	int n;
//n是图上点的个数 
	cin>>n;
	int a[n+1][n+1];
//定义一个矩阵,二维数组,矩阵1表示两者之间有线连接,0表示两者之间无线连接 
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
		 } 
	}
//输入二维数组 
	
	int stack[n+1];
//定义一个栈 
	int top=0;
//定义栈顶元素 
	int p[n+1]={0};
//定义p数组为空,p数组中1代表某一个点被搜索过 ,0代表某一个点没有被搜索过 
	int k=0;
//定义k=0,k是个序列,从0到n扫描每一行,相当于一个指针 
	top++;
	stack[top]=1;
	p[1]=1;
//把深搜的起点定义好,加入到栈内,p更改为1,表示搜索过 
	cout<<1;
//要求输出路径,这是第一步 
	while(top>0)
//进入while循环,当top大于0即队列还有数的时候,执行以下操作 
	{
		k++;
//k作为指针,逐一扫描每一行 
		if(k>n)
//如果k比n大,即k的值已经超出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值