话不多说,先放题目。
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。

输入格式:
输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。

输出格式:
按照"{ v1 v2… vk }"的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。

输入样例:
8 6
0 7
0 1
2 0
4 1
2 4
3 5

输出样例:
{ 0 1 4 2 7 }
{ 3 5 }
{ 6 }
{ 0 1 2 7 4 }
{ 3 5 }
{ 6 }

这道题其实非常简单,但是代码量稍微有点大?
基本思路是这样的:

  1. 建立一个图
  2. DFS和BFS(BFS需要使用队列)

以下是本人的代码:

#include<stdio.h>
#include<stdlib.h>#define MaxVertexNum 10typedef struct VNode{int Nv,Ne;int G[MaxVertexNum][MaxVertexNum];
}MGraph;typedef struct queue{int Front;int Rear;int* a;int Capacity;int Size;
}Queue;MGraph* CreateGraph(int VertexNum);
void Insert(MGraph* M,int V1,int V2);
Queue* CreateQueue(int N);
void EnQueue(Queue* Q,int V);
int DeQueue(Queue* Q);
void DFS(MGraph* M,int V);
void BFS(MGraph* M,Queue* Q,int V);static int DVisited[10];
static int BVisited[10];int main(void)
{int N,E;int V1,V2;MGraph* M;Queue* Q;scanf("%d%d",&N,&E);/* 创建图 */M = CreateGraph(N);/* 为了BFS创建队列 */Q = CreateQueue(N);for(int i = 0;i < E;i++){scanf("%d%d",&V1,&V2);Insert(M,V1,V2);}/* 遍历图DFS */for(int i = 0;i < M->Nv;i++){if(!DVisited[i]){printf("{ ");DFS(M,i);printf("}\n");} }for(int i = 0;i < M->Nv;i++){if(!BVisited[i]){printf("{ ");BFS(M,Q,i);printf("}\n");} }system("pause");
}void DFS(MGraph* M,int V)
{DVisited[V] = 1;printf("%d ",V);for(int i = 0;i < M->Nv;i++){if(M->G[V][i]&&!DVisited[i]){DFS(M,i);}}
}void BFS(MGraph* M,Queue* Q,int V)
{EnQueue(Q,V);BVisited[V] = 1;printf("%d ",V);while(Q->Size != 0){V = DeQueue(Q);for(int i = 0;i < M->Nv;i++){if(!BVisited[i]&&M->G[V][i]){BVisited[i] = 1;printf("%d ",i);EnQueue(Q,i);}}}
}Queue* CreateQueue(int N)
{Queue* Q;Q = (Queue*)malloc(sizeof(Queue));Q->Front = 0;Q->Rear = 0;Q->a = (int*)malloc(sizeof(int)*N);Q->Capacity = N;Q->Size = 0;return Q;
}void EnQueue(Queue* Q,int V)
{ Q->Size++;Q->a[Q->Rear] = V;Q->Rear = ++Q->Rear % Q->Capacity;
}int DeQueue(Queue* Q)
{int temp;temp = Q->a[Q->Front];Q->Front = ++Q->Front % Q->Capacity;Q->Size--;return temp;
}MGraph* CreateGraph(int VertexNum)
{MGraph* M;int V,W;M = (MGraph*)malloc(sizeof(MGraph));M->Ne = 0;M->Nv = VertexNum;for(V = 0;V < VertexNum;V++)for(W = 0; W < VertexNum;W++)M->G[V][W] = 0;return M;
}void Insert(MGraph* M,int V1,int V2)
{M->G[V1][V2] = 1;M->G[V2][V1] = 1;
}

这题也没有去参考网上其他人的答案,虽然这题很简单,但我还是有点骄傲的。当然我也有一些不严谨的地方,比如队列的判空判满。

[DS_PRATICE]列出连通集(c语言)相关推荐

  1. 7-6 列出连通集 (25 分)(详解)

    列出连通集 1:思路 : 利用了邻接矩阵储存数据并建图,然后就是 DFS遍历和BFS遍历 只不过是本题需要输出的是非连通图 连通分量 外加俩函数搞定 2:上码 #include<bits/std ...

  2. 06-图1 列出连通集

    06-图1 列出连通集(25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺 ...

  3. 7-5 列出连通集 (6 分)

    7-5 列出连通集 (6 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访 ...

  4. 7-201 列出连通集 (25 分)

    7-201 列出连通集 (25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的 ...

  5. 7-2 列出连通集 (25分)

    文章目录 7-2 列出连通集 (25分) 输入格式: 输出格式: 输入样例: 输出样例: 题解 伪代码 代码 7-2 列出连通集 (25分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别 ...

  6. 7-1 列出连通集(25 分)

    7-1 列出连通集(25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访 ...

  7. 7-2 列出连通集 (25 分)

    给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点. 输入格式: 输入第1 ...

  8. 列出连通集(java)

    7-6 列出连通集 (25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序 ...

  9. 06-图1 列出连通集 —— 非联通图的DFS与BFS

    06-图1 列出连通集 (25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的 ...

最新文章

  1. SAP FI常用事务码
  2. open-capacity-platform环境安装
  3. 2017年5个网络行业快速发展技术趋势
  4. ubuntu linux mac地址,Ubuntu下修改mac地址
  5. 【转】ABP源码分析二十四:Notification
  6. One year ago begininginginginging!
  7. TikZ绘图示例——尺规作图:线段的任意等分
  8. 很少人用的下载者方法
  9. 【保研】2021南京大学计算机夏令营笔试面试笔记
  10. linux进阶-PHP加速器
  11. Threejs实现3d地球记录(1)
  12. jenkins编译java项目时无法读取pom.xml文件
  13. MongodDB集群设置登录账号密码(增加key-file以供集群内部相互验证身份)
  14. 关于git中,两个branch自动同步的问题和解决
  15. 【面试】奇虎360笔试解答
  16. 婚恋大数据火了,靠大数据找对象,靠谱吗?
  17. 中国青年教师跌入“社会底层”?同一高校收入差距巨大
  18. 二进制转化成ascll_用java将二进制转换ascii码
  19. php输出json数据方法
  20. Vue中的Ajax②(slot插槽)

热门文章

  1. 利用 git status -uno 找回不小心删除了些啥
  2. C#中单例模式最简单用法之Lazy
  3. VNCServer 使用
  4. 解决Apple Watch S7 突然之间耗电快、续航差的问题
  5. 初中计算机学业水平考试知识点,初中信息技术学业水平考试知识点
  6. 2017lol服务器维修,2017LOl均衡教派维护多久 | 手游网游页游攻略大全
  7. 容联云通讯短信接口 Python3 文档
  8. Alibaba Cloud Linux 3 安装部署 ECStore B2C V5.0.1 社区版
  9. 很困。。。我要转。业。
  10. RDM6300 125KHz ID卡读卡器