列出连通集

来源:互联网 发布:网络流行歌曲2014 编辑:程序博客网 时间:2024/05/19 22:06

列出连通集

#include<stdio.h>#include<stdlib.h>#include<cstdio>#include<iostream>#include<stack>#include<queue>#include<string.h>using namespace std;#define MaxVerNum 100queue<int> q;typedef struct GNode *PtrToGNode;struct GNode {    int Edgs[MaxVerNum][MaxVerNum];    int Vnum,Enum;    int Visited[MaxVerNum];}Graph;typedef PtrToGNode MGraph;MGraph CreateGraph(){    MGraph G;    G = (MGraph)malloc(sizeof(Graph));    int n,e;    cin>>n>>e;    G->Vnum=n;    G->Enum=e;    for(int i=0;i<G->Vnum;i++)    for(int j=0;j<G->Vnum;j++)    {        G->Edgs[i][j]=0;        G->Visited[i]=0;        G->Edgs[i][i]=1;    }    int a,b;    for(int i=1;i<=G->Enum;i++)    {        scanf("%d%d",&a,&b);        G->Edgs[a][b]=G->Edgs[b][a]=1;    }    return G;}void DFS(MGraph G, int v){    for(int i=0;i<G->Vnum;i++)    {        if(G->Visited[i]==0&&G->Edgs[v][i]==1)        {            printf(" %d",i);            G->Visited[i]=1;            DFS(G,i);        }    }}void BFS(MGraph G, int v){    for(int i=0;i<G->Vnum;i++)    {        if(G->Visited[i]==0&&G->Edgs[v][i]==1)        {            printf(" %d",i);            G->Visited[i]=1;            q.push(i);        }    }    while(!q.empty())    {        int a=q.front();        q.pop();        BFS(G,a);    }}void Print(MGraph G){    for(int i=0;i<G->Vnum;i++)    {        if(G->Visited[i]==0)        {            printf("{");            DFS(G,i);            printf(" }\n");        }    }    for(int j=0;j<G->Vnum;j++)    {        G->Visited[j]=0;        }    for(int i=0;i<G->Vnum;i++)    {        if(G->Visited[i]==0)        {            printf("{");            BFS(G,i);            printf(" }\n");        }    }}int main() {    MGraph G;    G=CreateGraph();    Print(G);    return 0;}
原创粉丝点击