求无向图中指定两个节点间的所有路径

这是一道来自百度面试的题目,要求解决如何在无向图中找出任意两个指定节点之间的所有可能路径。这个问题涉及到图论和深度优先搜索(DFS)或者广度优先搜索(BFS)等算法知识。
摘要由CSDN通过智能技术生成

百度面试题:

//邻接矩阵的遍历
typedef struct{
	int amount;
	int *vex;
	int **matrix;
}Graph;

//打印从i到j的所有回路
void PrintAllPath(Graph& G, int i, int j){
	if( i > G.amount || j > G.amount || i < 0 || j < 0)
		return;

	//初始化访问标识
	bool *IsVisted = (bool *)malloc(sizeof(bool) * G.amount);
	for(int k = 0; k < G.amount; k++)
		IsVisted[k] = false;

	std::stack<int> s_Gnode;
	s_Gnode.push(G.vex[i]);
	IsVisted[i] = true;

	//程序的关键是设置了pop_node和top_node; 
	//因为图是按照序号的从小到大访问,所以一旦有pop_node,必须从pop_node+1开始访问
	int top_node;
	int pop_node = -1;//最开始pop_node从0开始遍历

	while( !s_Gnode.empty()){
		top_node = s_Gnode.top();
		int k;
		for( k = pop_node+1; k < G.amount; k++ ){
			if(G.matrix[top_node][k] == 1 && IsVisted[k] == false){
				//如果当前节点是j节点,则打印栈中的所有元素
				if(G.vex[k] == j){
					s_Gnode.push(G.vex[k]);
					PrintStack(s_Gnode);
					pop_nod
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值