深度优先搜索

深度优先搜索就是有多远就走多远,能滚到哪就滚到哪大笑

这个思想是从头访问一个点,输出这个点,然后把这个点标记为已读,找到与他相连的任意一个点,再次进行此操作,递归

挺好理解的哈

给个例子:


伪代码:


int    flag = 0;  // 这个就是标记量,标记有多少个已经走过了,如果这个flag == 总共的点数,那么就代表程序输出结束了

对象  point         //每个点是一个对象,属性有连接的点的数组,一个int a变量标记是否已经走过,  0代表没走过,1代表走过


先来一个递归的,直接写的,不确定对不对啊,大体思路绝对没问题的,反正也是伪代码啊大笑

deep (point p)

{

       if(flag  ==  总共的点数)

         {

               //ok了,可以退出函数了

         }

 

       if(p.a == 0)

         {

              System.out.print(p);

              p.a = 1;

              flag ++;

              deep(一个连接他的点);

         }

      

        else

         {

             deep(返回上一个点);

         }

}

//这个程序在if的deep递归的时候中还需要一个操作,不能每次都递归那个连接点数组中的第一个,你每次都deep第一个那后面的能愿意吗?是吧,这个怎么做没写,因为有很多种方法,比如,每次先取出第一个,然后在数组中删除等

//还有一个就是怎么找到上一个点,这个随便写,也不说了


再写一个循环的

while (true)

{

      if(flag  ==  总共的点数)

        {

              break;

         }

       if(p.a  ==  0)

         {

             System.out.print(p);

             flag++;

             p.a  = 下一个连接的点 ;

          }

       else

         {

             p.a = 上一个点;

          }

}

这个跟递归差不多,当然问题也差不多。。。


void DFS(ALGraph G, int v){          //G为邻接表类型

  cout<<v;  visited[v] = true;      //访问第v个顶点

  p= G.vertices[v].firstarc;     //p指向v的边链表的第一个边结点

while(p!=NULL){                //边结点非空

  w=p->adjvex;                 //表示wv的邻接点

  if(!visited[w])  DFS(G,w);   //如果w未访问,则递归调用DFS

  p=p->nextarc;                  //p指向下一个边结点

 }

}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值