无向图输出两个节点之间的所有路径
借鉴了这篇文章https://blog.csdn.net/h471507602/article/details/80452342,感谢!
但是改了节点个数会报错,于是自己打了一个,应该是没错的,本来想好好写一下的,写的又不像C语言又不像C++。。
但是要是修改的话很容易的,自己改吧。
#include<iostream>
#include<vector>#define SUM_NODE 6 // 节点个数using namespace std;
vector<vector<int> > all_pathway;//保存所有路径
vector<int> a_pathway;//保存一条路径
int matrix[SUM_NODE][SUM_NODE];//邻接矩阵
int visited[SUM_NODE];//是否访问
int sum = 1;void init() //矩阵初始化 想要改矩阵在这里
{for(int i=0;i<SUM_NODE;i++){for(int j=0;j<SUM_NODE;j++){if(i==j){matrix[i][j]=0;}else{matrix[i][j]=1; }}}
}
void output()
{cout << "第" << sum << "条路径: ";for(int i=0;i<a_pathway.size();i++){cout<<a_pathway.at(i)<<" ";}cout<<endl;sum++;
}
void DFS(int a[SUM_NODE][SUM_NODE],int start,int end) //深搜遍历
{a_pathway.push_back(start);//将当前节点入栈visited[start]=true;//标记为已经访问过int middle=0;//一个索引,用来找到下一个节点 while(a_pathway.empty()==false)//如果栈空则结束{if(start==end)//如果当前节点就是目标节点{output(); //输出这条路径 all_pathway.push_back(a_pathway);//保存一条路径a_pathway.pop_back();//退栈,回溯visited[start]=false;//设置为没有被访问过 break; //退出一个递归 } while(middle<SUM_NODE)//如果没有到最后一个邻居{if(matrix[start][middle]==1&&visited[middle]==false)//如果与邻居相通且这个邻居节点未被的访问过{DFS(matrix,middle,end); //递归查询 } middle++; //一个一个向后寻找相通的邻居节点 }if(middle==SUM_NODE) //找到最后一个了 {visited[a_pathway.at(a_pathway.size()-1)] = false;//先标记栈中最后一个元素为没有访问过a_pathway.pop_back();//退栈,回溯 break; //退出一个递归 }}
}int main()
{init();DFS(matrix,0,5);//起点和终点return 0;}
无向图输出两个节点之间的所有路径相关推荐
- neo4j java查找_Spring-Boot使用neo4j-java-driver-- 查找两个节点之间关系的最短路径
一.Cypher数据 create (小北:朋友圈{姓名:"小北", 喜欢的书类:"Poetry"}), (小菲:朋友圈{姓名:"小菲", ...
- 算法----- 给定一颗二叉树,找到二叉树上任意两个节点之间的距离(Java版本)
题目: 给定一颗二叉树,找到二叉树上任意两个节点之间的距离 class TreeNode {TreeNode left;TreeNode right;} 思路: 首先找到一个节点的路径,然后找到另一个 ...
- zabbix使用fping监控任意两个节点之间的网络质量、丢包率和响应时间
zabbix使用fping监控任意两个节点之间的网络质量.丢包率和响应时间 zabbix使用fping监控任意两个节点之间的网络质量.丢包率和响应时间之前的博文 使用zabbix3.0.4的ICMP ...
- 查找有向图中两个顶点之间是否存在路径
查找有向图中两个顶点之间是否存在路径 给定一个有向图和其中的两个顶点,检查是否存在从第一个给定顶点到第二个顶点的路径. Consider the following Graph:Input : (u, ...
- 依赖树(dependecyTree)-语义边、两个词语之间的依赖边路径
依赖树官方文档 参考:https://nlp.stanford.edu/software/dependencies_manual.pdf 依存树参考:https://www.jianshu.com/p ...
- 【Python】青少年蓝桥杯_每日一题_11.03_按要求输出两个正整数之间的数
编程实现 分别输入两个正整数 M.N,输出 M 到 N 之间(含 M.N)所有可被 7 整除,但不是 5 的倍数的数, 并以逗号分隔按顺序打印在一行. 输入描述:分别输入两个正整数 M.N 输出描述: ...
- Spring Data Neo4j解除两个节点之间的关系
问题 需要解除两个Node之间的某种关系 思路 利用@Query注解,在其中运行Cypher的解除两个Node之间关系语句即可. Repository @Query("MATCH (:MyN ...
- 路径还原(求两个点之间最短距离的路径)
思路:其实就是加一个pre数组,用来存当前顶点的前一个顶点的值. 看代码 #include<iostream> #include<cstdio> #include<cst ...
- 微软算法100题11 求二叉树中两节点之间的最大距离
第11 题 求二叉树中节点的最大距离... 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的, 我们姑且定义"距离"为两节点之间边的个数. 写一个程序, 求一棵二叉树中相 ...
最新文章
- 机器学习的门槛再度降低,AI小白如何用5分钟搞定建模?
- Conda 为什么越来越慢?
- 如何理解“异或(XOR)”运算在计算机科学中的重要性?(转自-阿里聚安全)...
- iOS之开发中一些相关的路径以及获取路径的方法
- 10本最火的中台与数字化转型图书,朋友圈都在传
- C++ set与map、unordered_map、unordered_set与哈希表
- 使用TensorFlow 来实现一个简单的验证码识别过程
- Microsoft SQL Server 2008 Management Studio Express 下载地址
- 苹果macfcpx视频剪辑软件:Final Cut Pro X
- C++调用caffe分类模型-Opencv3.4.3
- flume学习(四):Flume Channel Selectors使用
- SuperMap iClient3D for WebGL实现三维管线分析
- office文档管理服务器编辑,office在线编辑方案
- 把java代码导成pdf_Java将Excel导出成pdf文件
- 【MOS管知识汇总】分类、区分、寄生二极管、导通条件、开关电路、串联电阻
- 用AI对抗AI!教代码调戏深度学习算法生成的假视频
- 微信小程序开发的基础学习
- violate,synchronized
- 小春日记 - 基金初识
- css超过一定长度显示省略号