图论算法之图的遍历

/**
图论算法
遍历
*/
#include<stdio.h>
#include<vector>
#include<queue>

using namespace std;

int g[100][100];//邻接矩阵表示法,0代表无边,1代表右边
int visit[100];//0代表没遍历,1代表遍历过

void BFS(int n, int start)//从start号节点开始BFS遍历
{
    queue<int> Q;
    //printf("%d ",start);
    Q.push(start);
    visit[start] = 1;
    for(int i=1;i<=n;i++)
    {
        if(g[start][i] == 1)
        {
            //printf("%d ",i);
            Q.push(i);
            visit[i] = 1;
        }
    }
    while(!Q.empty())
    {
        int tt = Q.front();
        Q.pop();
        printf("%d ",tt);
        for(int i=1;i<=n;i++)
        {
            if(g[tt][i]==1 && visit[i] == 0)
            {
                //printf("%d ",i);
                Q.push(i);
                visit[i] = 1;
            }
        }
    }
}
void DFS(int n, int start)//从start号节点开始遍历
{
    printf("%d ",start);
    visit[start] = 1;
    for(int i=1;i<=n;i++)
    {
        if(g[start][i] == 1 && visit[i] == 0)
        {
            //printf("%d ",i);
            visit[i] = 1;
            DFS(n, i);
        }
    }
}
void Print(int n)//打印矩阵,0行0列不用
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            printf("%d ",g[i][j]);
        }
        printf("\n");
    }
}
int main ()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=0;i<m;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        g[a][b] = 1;//无向图
        g[b][a] = 1;
    }

    //BFS(n,1);
    //DFS(n, 1);
    return 0;
}
/**
4 4
1 2
2 3
3 4
4 1

4 3
1 3
3 2
2 4
*/

 

posted @ 2021-03-07 21:31  永恒&  阅读(72)  评论(0编辑  收藏  举报