图的遍历(DFS与BFS)

一、深度优先遍历(DFS)

基本思想:从图中某个顶点Vo出发,访问此顶点,然后依次从Vo的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和Vo有路径相通的顶点都被访问到。

代码(递归用vector存)

<php>
const int MAXN=1010;
vector <int> g[MAXN];//存储边
bool visited [MAXN];//节点是否被访问
void dfs(int x)
        {visited[x]=true;//标记x被访问
        for(int i=0;i<g[x].size();i++)
            if(!visited[i])
            dfs(i);//遍历x的相邻结点,若没被访问则从这个结点开始深搜遍历
            }

二、广度优先遍历(BFS)

从某个顶点Vo出发,并在访问此顶点之后依次访问Vo的所有未被访问过的邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有和Vo有路径相通的顶点都被访问到。

代码(用队列)

<php>
const int MAXN=1000+5;
vector <int> g[MAXN];//存储边
queue<int> q;
bool visited[MAXN];//是否被访问
for(int i=1;i<=MAXN;i++)
g[i].clear();
while(!q.empty())
q.pop();//移除队列第一个元素
memset(visited,0,sizeof(visited));
void bfs()
    {visited[1]=1;//初始结点进入队列
    q.push(1);
    while(!q.empty())//队列为空时结束遍历
        {int t=q.front();
         q.pop();
         for(int i=0;i<g[t].size();i++)//寻找队头元素的相邻结点并弹出队头元素
         if(!visited[i])//访问相邻结点并使之入队
         {q.push(i);
          visited[i]=1;
         }
        }
    } 

三、vector 容器

①头文件 #include
②创建vector对象 vector vec;
③尾部插入数字 vec.push_back(a);
清空 vec.clear();
大小 vec.size();
④使用迭代器访问元素

vector::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<< *it;
⑤在第i个元素前插入新元素a
vec.insert(vec.begin()+i,a);
删掉某个元素(从0开始删掉第i个)
vec.erase(v.begin()+i);
(删除一段)
vec.erase(v.begin()+i;v.begin()+j);
⑥用sort排序(升序)
#include
sort(vec.begin(),vec.end());

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值