DFS一个图并求出它的连通分支个数

本文介绍如何运用深度优先搜索(DFS)算法遍历图,并确定图的连通分支个数。在连通图中,任意两点间都有路径相连。连通分支大小可以通过重新开始DFS的次数来计算。提供了相关的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深度优先算法:选择一个点依次DFS它所连接的点,并且每个点会有一个visited标记表示是否被遍历。

连通图:如果一个图中任意两点都存在路径连接,那么这个图称为连通图

连通分支大小:遍历这个图里的所有点,有多少次重新选取一个点从它开始DFS这个图就有多少个连通分支

代码:

#include <fstream>
#include<iostream>
#include<stdlib.h>

using namespace std;

void visit(int* visited, int num)
{
    visited[num]=1;
}

void DFS(int ph[][10], int *visited, int num)
{
    visit(visited, num);
    for(int i=num+1; i<10; i++)
    {
        if(ph[num][i]==1)
        {
            if(!visited[i])
            {
                visit(visited, i);
                DFS(ph, visited, i);
            }
        }
    }
}

int main() //程序从这里开始运行
{
    int ph[10][10];
    int visited[10]={0};
    int flag=0;
    char ch;
    ifstream OpenFile("tu.txt");
    for(int j=0; j<10; j++)
    {
        for(int k=0; k<10; k++)
        {
            OpenFile.get(ch);
            ph[j][k] = (int)ch-48;
        }
    }
    cout << "本图邻接矩阵为:" << endl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值