图的遍历

图的遍历

 

问题描述:

  从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历。图的遍历的遍历有DFS和BFS两种。  上面的图,从顶点0出发,按照顶点序号从小到大的顺序DFS,得到遍历顺序为0 1 2 3  4 5 6 7 8。

输入:

图的顶点数与边数,以及每条边的两个顶点。

输出:

dfs遍历顺序

 

输入样例:

9 10
0 1
1 2
2 3
1 4
0 4
0 8
8 5
5 4
5 6
6 7

输出样例:

0 1 2 3 4 5 6 7 8

代码:

#include <iostream>
#define N 20
using namespace std;
int a[N][N],b[N],bz[N],s,n;

void dfs(int k)
{
    int i;
    if(s==n)
    {
    for(i=0;i<n-1;i++)cout<<b[i]<<" ";
    cout<<b[n-1]<<endl;    
    }
    else 
    for(i=0;i<n;i++)
     if(bz[i]==0&&a[k][i]==1)
     {
         b[s]=i;s++;
         bz[i]=1;
         dfs(i);
         bz[i]=0;
     }
}
int main(int argc, char *argv[])
{
    int i,j,k,x,y;
    memset(a,0,sizeof(a));
    memset(bz,0,sizeof(bz));
    cin>>n>>k;
    while(k--)
    {
        cin>>x>>y;
        a[x][y]=a[y][x]=1;
        
    }
    bz[0]=1;s=1;b[0]=0;
    dfs(0);
    return 0;
} 


 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值