oj - 刷题

一.深度优先

深度优先遍历是一个递归的过程

i从顶点v出发进行深度优先遍历的基本思想是:

(1)访问顶点v

( 2)从v的未被访问的邻接点中选取一个顶点w,从w出发进行深度优先遍历

(3)重复上述两步,直至访问所有和v有路径相通的顶点
 

伪代码:

算法 :DFTraverse

I输入:顶点的编号v

输出:无

1. 访问顶点v;修改标志visited[v]= 1;

2. w =顶点v的第一个邻接点;

3. while (w存在)

3.1 if(w未被访问)从顶点w出发递归执行该算法;3.2 w =顶点v的下一个邻接点;

template
void MGraph :: DFTraverse(int v)
{
     cout << vertex[v]; visited[v] = 1;
     for (int j = 0; j < vertexNum; j++)
          if (edge[v][j] == 1 && visited[j] == 0)   
                DFTraverse( j );
}

二.广度优先

"先被访问顶点的邻接点"先于“后被访问顶点的邻接点”

i从顶点v出发进行广度优先遍历的基本思想是:

(1)访问顶点v

(2)依次访问v的各个未被访问的邻接点V/2......

(3)分别从V, 2, ... Vk出发依次访问它们未被访问的邻接点,| 直至访问所有与顶点v有路径相通的顶点

伪代码

算法 :BFTraverse

输入 :顶点的编号 v

输出:无

1.队列Q初始化;

2.访问顶点v;修改标志visited [v]= 1;顶点v入队列Q;

3. while (队列Q非空)

3.1 v=队列Q的队头元素出队;

3.2w=顶点v的第一个邻接点;

3.3 while (w存在)

3.3.1 如果w未被访问,则

访问顶点w ;修改标志visited[w]= 1;顶点w入队列Q ;3.3.2w=顶点v的下一个邻接点;
 

template
void MGraph :: BFTraverse(int v)
{
      int w, j, Q[MaxSize]; //采用顺序队列
      int front = -1, rear = -1; //初始化队列
      cout << vertex[v]; visited[v] = 1; Q[++rear] = v; //被访问顶点入队
      while (front != rear) //当队列非空时
      {
           w = Q[++front]; //将队头元素出队并送到v中
           for (j = 0; j < vertexNum; j++)
           if (edge[w][j] == 1 && visited[j] == 0 ) 
           {
                 cout << vertex[j]; 
                 visited[j] = 1; Q[++rear] = j;
            }
       }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值