个人模板 图的深度,广度优先遍历

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int vis[101];
int a[101][101];
int n,m,sum;//n个点,m条边
void dfs(int s)
{
    printf("%d ",s);
    sum++;
    if(sum==n)
        return;
    for(int i=1; i<=n; i++)
    {
        if(a[s][i]&&!vis[i])
        {
            vis[i]=1;
            dfs(i);
        }
    }
}
void bfs()
{
    memset(vis,0,sizeof(vis));
    queue<int>k;
    for(int i=1; i<=n; i++)
    {
        if(!vis[i])
        {
            vis[i]=1;
            printf("%d ",i);
        }
        k.push(i);
        while(!k.empty())
        {
            int t=k.front();
            k.pop();
            for(int j=1; j<=n; j++)
            {
                if(!vis[j]&&(a[j][t]==1||a[t][j]==1))
                {
                    vis[j]=1;
                    printf("%d ",j);
                    k.push(j);
                }
            }
        }
    }
}
int main()
{
    while(scanf("%d%d",&n,&m)==2)
    {
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                if(i==j)
                    a[i][j]=0;
                else
                    a[i][j]=-1;
            }
        }
        int x,y;
        for(int i=0; i<m; i++)
        {
            scanf("%d%d",&x,&y);
            a[x][y]=1;
            a[y][x]=1;
        }
        vis[1]=1;
        sum=0;
        printf("dfs:\n");
        dfs(1);
        printf("\nbfs:\n");
        bfs();
        printf("\n");
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                printf(" %d到%d的距离:%d ",i,j,a[i][j]); ///-1表示无法到达
            }
            printf("\n");
        }
    }
}

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/NEET_Champloo/article/details/66975241
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞