资源简介
函数功能:找到图中两个节点之间的所有路径
参数说明:1、Matrix 初始矩阵,将路径矩阵的形式存储,本程序对应的是一个无向图。
2、headNode 初始节点
3、endNode 结束节点
主要的思想 利用深度优先遍历的算法
1、利用result来存放每次从栈中出栈的数据,里面很可能就是要找的路径,为什么要单独提取出来,因为包含了多条路径
2、通过设置 访问是否的变量来避免回路
代码片段和文件信息
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#include
#include
#include
using namespace std;
struct Node
{
int key;
int flag;
Node()
{
flag = 0;
}
};
class Graph
{
public:
vector> resultPath;
vector result;
int _maxEdgePath;
int _pointNum;
Node headNode;//起始节点
Node endNode;//终止节点
stack tempStack;
int pathNum;
int nPos;
vector Mark;
public:
Graph(int maxEdgePath int pointNum)
{
_maxEdgePath = maxEdgePath;
_pointNum = pointNum;
//将矩阵中的元素置为空
for (int i = 0; i {
vector tmpresultPath;
for (int j = 0; j {
tmpresultPath.push_back(0);
}
resultPath.push_back(tmpresultPath);
result.push_back(0);
Mark.push_back(false);
}
result.push_back(0);
pathNum = 0;
nPos = 0;
}
vector CalcPath(vector> Matrix)
{
//开始节点
headNode.key = 2;
headNode.flag = 1;
//结束节点
endNode.key = 8;
FindAllPath(Matrix headNode endNode);
if (pathNum == 1)
return resultPath[0];
else
return result;
}
/************************************************************************/
/* 函数功能:找到图中两个节点之间的所有路径
参数说明:1、Matrix 初始矩阵,将路径矩阵的形式存储,本程序对应的是一个无向图。
2、headNode 初始节点
3、endNode 结束节点
主要的思想 利用深度优先遍历的算法
1、利用result来存放每次从栈中出栈的数据,里面很可能就是要找的路径,为什么要单独提取出来,因为包含了多条路径
2、通过设置 访问是否的变量来避免回路/
/************************************************************************/
void FindAllPath(vector> Matrix Node startNodeKey Node endNodeKey)
{
result[nPos] = startNodeKey.key; //将当前元素放入结果集中
Mark[startNodeKey.key - 1] = true; //将访问标记为已访问
nPos++; //结果集索引加1
while (nPos != 0)
{
int tempVal = result[nPos - 1];//获取到最前面的元素
if (tempVal == endNodeKey.key) //若当前元素为目标节点
{
for (int j = 0; j {
resultPath[pathNum][j] = result[j]; //将结果集复制于最后的路径矩阵中
}
nPos--; //回溯至上一个节点
result[nPos] = 0; //结果集对应索引置为空
pathNum++; //路径数目加1
Mark[endNodeKey.key - 1] = false;
break;
}
while (startNodeKey.flag<_pointNum)//利用flag来指示每次的元素的索引
{
if (Matrix[tempVal - 1][startNodeKey.flag] == 1)
{
if (Mark[startNodeKey.flag] == false)//利用Mark来判断是否已经访问过该节点
{
Node tempNode;
tempNode.key = startNodeKey.flag + 1;
FindAllPath(Matrix tempNode endNodeKey);//深度优先遍历算法,
}
}
startNodeKey.flag++;//索引值相应的加一
}
if (startNodeKey.flag == _pointNum)//如果已经是到最后的邻居,说明访问结束,
{ //将对应的值置为空
nPos--; //再次向上回溯
startNodeKey.flag = 0; //将节点的索引置为空
result[nPos] = 0; //将结果集中对应的索引置为空
Mark[startNodeKey.key - 1] = false; //访问之后标记为未访问。因为下面的元素已经访问结束,便于下次的访问
break;
}
}
}
};
int main()
{
//对应无向图的矩阵
vector> Matrix;
for (int i = 0; i < 10; i++)
{
- 上一篇:libv4l-dev
- 下一篇:实现一个unix命令解释程序
相关资源
- 单片机控制继电器模块电路原理图,
- HTTP 请求工具类(含HTTPS)(参数、二
- 小波图像处理
- Qt4 百度地图 定位
- 酒店订房系统用例图
- lena 图片 512*512 gray and color
- 将24位BMP图片转16位565格式-特别适合
- 1602字符液晶滚动演示程序和仿真图
- EP1C6核心板V20原理图
- Qt绘制编辑移动矢量图形
- Foundations Of 3D Computer Graphics (高清P
- raphael画流程图
- 图片加马赛克工具 体积小巧 操作简单
- 图书管理系统VF
- 电梯模拟 用C写的 很好的一个图形化
- 所有符号+常用3500汉字字符—utf8/txt文
- iOS时间选择器,开始时间时分— 结束
- TMS320F28027最小原理图
- windows画图软件课程设计报告
-
Rocket Dock / ob
ject Dock Tray 系统托盘图 - 波形发生器模电课程设计含原理图、
- 图书管理系统测试设计
- 从XPS文件中获取文字或图片
- 递归双边滤波图像处理
- 哈夫曼编码实现图像压缩
- AC6928B-音箱参考原理图
- 蚁群算法(得到最佳路径)
- aodv 协议运行过程流程图
- ArcEngine从excel读取数据生成点shape图层
- 27MHZ 无线数据收发器电路图
评论
共有 条评论