有向图(2)--深度优先搜索&&广度优先搜索

-DepthFirstDirectedPaths 深度优先搜索

解决单点有向路径。给定一幅有向图和一个起点s,回答“从s到给定目的顶点v是否存在一条有向路径?如果有,请找出这条路径”等类似问题。

#ifndef __DEPTH_FIRST_PATHS_H__
#define __DEPTH_FIRST_PATHS_H__

#include "Digraph.h"
#include <stack>

class DepthFirstDirectedPaths {
private:
	bool* marked;	// 是否标记过
	int* edgeTo;	// 指向索引的点
	int start;		// 起点

public:
	DepthFirstDirectedPaths(const Digraph& G, int s);
	~DepthFirstDirectedPaths() { delete[] marked; delete[] edgeTo; }

	bool hasPathTo(int v)const { return marked[v]; }
	std::stack<int> pathTo(int v)const;

private:
	void dfs(const Digraph& G, int v);
};

// constructor
DepthFirstDirectedPaths::DepthFirstDirectedPaths(const Digraph& G, int s) {
	start = s;
	marked = new bool[G.getV()];
	edgeTo = new int[G.getV()];
	for (int i = 0; i < G.getV(); ++i) {
		marked[i] = false;
		edgeTo[i] = i;
	}
	dfs(G, s);
}

void DepthFirstDirectedPaths::df
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值