临界表的应用

*
设计文档:
对问题的描述是:判断从一个顶点到另一个顶点是否存在路径。
设计抽象数据类型
设计数据结构:采用临界表存储;
设计节点结构;
设计遍历算法,实现寻找路径:利用深度优先遍历,从一个顶点出发,访问到所要找的顶点,
                            即是所求路径;
*/
#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;


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值