*
设计文档:
对问题的描述是:判断从一个顶点到另一个顶点是否存在路径。
设计抽象数据类型
设计数据结构:采用临界表存储;
设计节点结构;
设计遍历算法,实现寻找路径:利用深度优先遍历,从一个顶点出发,访问到所要找的顶点,
即是所求路径;
*/
#include<iostream.h>
//#include<string.h>
const int MaxSize=10;
//template<class T>
struct ArcNode //定义边表结点
{
int adjvex; //其代表邻接点域,即是结点数组下标
ArcNode *next;
};
template<class T>
struct VertexNode //定义顶点表结点
{
T vertex;
ArcNode *firstedge;
};
template <class T>
class ALGraph
{
public:
ALGraph(T a[],int n,int e);
//~ALGraph(); //析构函数可以由系统自己调用,如果定义了,没有写出其算,就容易出错,thiscall----
void DFSTraverse(int v);
void BFSTraverse(int v);
private:
VertexNode<T> adjlist[MaxSize]; //定义结点数组,存放顶点,注意vertexNode后面的<T>不要忘记了,c++模板机制
int vertexNum,arcNum;
int visited[MaxSize];
};
template<class T>
ALGraph<T>::ALGraph(T a[],int n,int e)
{
vertexNum=n;
arcNum=e;
for(int i=0;i<MaxSize;i++)
visited[i]=0;
for(i=0;i<vertexNum;i++) //初始化顶点表
{
adjlist[i].vertex=a[i];
adjlist[i].firstedge=NULL;
}
for(int k=0;k<arcNum;k++)
{
int i,j;
cout<<"请输入两组数字:"<<endl;
cin>>i>>j;
ArcNode *s;
s=new ArcNode;
s->adjvex=j; //输入依附的两个顶点的序号
s->next=adjlist[i].firstedge;
adjlist[i].firstedge=s; //头插法
}
}
template<class T>
void ALGraph<T>::DFSTraverse(int v)
{
int j;
cout<<adjlist[v].vertex; //递归函数中不要再这里初始化visited数组
visited[v]=1;
ArcNode *p;
p=adjlist[v].firstedge;
while(p)
{
j=p->adjvex;
if(visited[j]==0)
DFSTraverse(j);
p=p->next;
}
}
template <class T>
void ALGraph<T>::BFSTraverse(int v)
{
int visited1[MaxSize];
int q[MaxSize]; //存放的是邻接点域
int front,rear;
for(int i=0;i<MaxSize;i++)
visited1[i]=0;
front=rear=-1;
cout<<adjlist[v].vertex;
visited1[v]=1;
q[++rear]=v; //模拟入队操作
while(front!=rear)
{
v=q[++front]; //模拟进队操作
ArcNode *p;
p=adjlist[v].firstedge;
while(p)
{
int j;
j=p->adjvex;
if(visited1[j]==0)
{
cout<<adjlist[j].vertex;
visited1[j]=1;
q[++rear]=j;
}
p=p->next;
}
}
}
void main()
{
int a[5]={1,2,3,4,5};
ALGraph<int> A(a,5,7); //此数据类型不能为char
cout<<"邻接表深度优先递归算法遍历结果:";
A.DFSTraverse(0);cout<<endl;
cout<<"邻接表广度优先算法遍历结果:";
A.BFSTraverse(0);cout<<endl;
}
分享到:
相关推荐
物质表面张力与临界表面张力 本资源主要介绍了物质表面张力和临界表面张力的概念、计算方法和影响因素,以及不同物质的临界表面张力值。同时,也讨论了固体临界表面张力与表面化学结构的关系。 一、物质表面张力 ...
在实际应用中,除了通过临界值表来确定F统计量的显著性,也可利用统计软件进行计算,软件能给出精确的F值以及对应的P值(概率值)。P值会告诉我们,在零假设为真的前提下,观察到的统计量或更极端情况出现的概率。...
F检验临界表是进行F检验时的参考工具,其中列出了在特定的显著性水平(通常为0.05或0.01)下,不同自由度组合下的F临界值。 F检验主要涉及两个参数:分子自由度(m)和分母自由度(n-m-1),其中m代表自变量(因素...
最后,查找临界值表,对比标准化偏差与临界值,如果某个标准化偏差大于表中的临界值,则认为对应的数据点为异常值。 需要注意的是,格鲁布斯算法只适用于独立、同分布的数据,并且数据的分布必须接近正态。在实际...
通过以上对《统计分布临界值表》各个部分的详细介绍,我们可以看出,这些统计工具和方法对于数据分析、假设检验、质量控制等方面都具有极其重要的应用价值。正确理解和运用这些临界值表能够帮助我们更准确地解释数据...
通过定义临界表,并结合具体的代码实现,我们能够更好地理解DFS的基本原理及其应用场景。 #### 二、图与深度优先搜索基础 1. **图的定义**:图是由顶点集和边集构成的数学模型。其中,顶点可以表示实体对象,边则...
超临界CO2萃取技术在制药工业中的应用广泛,例如: 1. 植物精油的提取:相比传统的水蒸气蒸馏法,超临界CO2萃取可以在较低温度下进行,有效保护热敏感物质,提高精油的品质和产率。 2. 天然药物成分的提取:比如从...
通过访问提供的链接(http://www.statsoft.com/textbook/stathome.html?sttable.html&1),可以进一步了解这两个分布及其在统计学中的应用,以及如何使用这些临界值表。 总结来说,"卡方与T的临界值表(电子表格)...
QT4线程临界区的应用主要涉及到多线程编程中的并发控制问题,这是为了确保在多线程环境下,同一时间只有一个线程可以访问特定的共享资源,以避免数据竞争和不一致状态的发生。QT4提供了丰富的多线程支持,包括线程类...
超临界反溶剂过程的应用前景十分广阔,特别是在药物超细化处理方面。该技术能够有效地提高药物的利用度,并赋予药物微粒良好的运输性质,因此在医药工业中具有极高的应用价值。随着化学材料、能源材料和医药领域对...
早期,该钢管仅限于国外少数厂家生产,无法满足国内新建超超临界火电机组的需求,考虑到国内钢铁行业与锅炉制造业共同努力使得该钢管已初步实现国产化的现状,推进国产S30432钢管的应用势在必行。本文介绍了S30432钢管在...
T分布临界值表的应用领域非常广泛,包括: * 医药统计(Medical Statistics) * 社会科学研究(Social Science Research) * 工程统计(Engineering Statistics) * 财经统计(Financial Statistics) 在实际应用...
线程同步是多线程编程中的一个重要概念,它涉及到如何协调多个并发执行的线程,以确保它们在访问共享资源时不会产生竞态条件或数据不一致。...了解和熟练掌握这些技术对于编写高效、可靠的多线程应用程序至关重要。
在本文中,作者通过建立PID控制器的数学模型,并通过MATLAB软件的Simulink模块进行并联结构的物理模型设计,来应用临界比例度法对系统进行参数自整定分析。在分析过程中,首先需要在调节装置前仅放置比例环节,并...
介绍了国内外超临界流体萃取工艺及发展情况,在对超临界流体萃取原理...分析了超临界流体技术的优越性,特别是在环境科学领域如废水处理、固体废物处理及污染监测中的应用。指出超临界流体技术是环境友好化学的发展趋势。
统计分布临界值表在数据...每个表都有其特定的用途,理解和应用这些临界值对于正确执行统计分析至关重要。在实际工作中,随着统计软件的发展,这些表的使用逐渐减少,但理解其背后的统计概念仍然是学习统计学的基础。
本文将针对操作系统中的临界区互斥问题,详细解读其概念、实现机制以及通过具体实验演示其应用。 首先,临界区是指在多线程系统中,对共享资源进行访问的代码段。由于多个线程可能同时需要访问同一资源,因此如果...