一个图的连通子图个数

问题描述:给出一个无向图,输出图中连通分支的个数。无向图的连通分支是一个子图,因此在子图两个节点之间至少存在一个路径。

 输入:给出一个连通图的二维数组

01000

10100

01000

00000

00000

输出:联通子图的个数

思路:从二位数组的第一行开始遍历,只遍历上三角(因为无向图是对称的),遍历第i行如果map中没有i把i加入到map中,然后对第行的每个值进行遍历,当gid【i】【j】的值为1的时候,把j放入堆栈中,遍历完第行之后,对堆栈中的数据(j)出栈,把其放入map中,然后对第j行进行遍历,按照这个方式直到堆栈为空,Num++,计算出了一个联通子图。

代码:

#include
#include
#include
using namespace std;
int GetStack(int(*d)[5], int i, int n, stack &st)
{
    int j;
    for(j = i;j st;
    map mapstor;
    int num =0;
    int i;
    for(i =0;i

你可能感兴趣的:(algorithm)