PAT:图的独立子图个数:DFS
2016-05-03 20:47
344 查看
1013. Battle Over Cities
思路:(1)题目给出一张图,以及几条边。要求当去掉其中的一个顶点后为了使剩下的顶点可以连通需要增加多少条边。
(2)其实只要考虑去掉这个顶点后,剩余的顶点可以组成几个独立的区域,假设该区域数为t,则需要增加的边即为t-1。
(3)为了实现(2)中所说,我们采用DFS(深度优先)最佳。
#include<stdlib.h> #include<limits.h> #include<iostream> #include<cmath> #include<vector> #include<string> #include<stack> #include<algorithm> using namespace std; int n,m,k; int edge[1005][1005]={0};//采用邻接矩阵的方式 int book[1001]={0}; int nums=0; void dfs(int c) { book[c]=1; for(int i=1;i<=n;i++) if(book[i]==0 && edge[i][c]==1) { dfs(i); } } int main() { cin>>n>>m>>k; int a,b,c; for(int i=0;i<m;i++) { vector<int> v2; cin>>a>>b; edge[a][b]=1; edge[b][a]=1; } for(int i=0;i<k;i++) { cin>>c; nums=0; for(int j=1;j<n+1;j++) book[j]=0; book[c]=1; for(int j=1;j<n+1;j++) { if(book[j]==0) { dfs(j); nums++;//遍历产生一个独立子图,nums++ } } cout<<(nums-1)<<endl; } return 0; }
#
相关文章推荐
- Android中动态设置TextView的颜色的方法
- 数据结构——单链表的简单实现
- 小知识点总结
- python 中文乱码问题
- FreeMarker 一二事 - 静态模板结合spring展示
- java窗口事件
- Dev Cpp自带的标准"Hello World"C++代码
- 观察者模式(Observer)
- /etc/sudoer修改错误,且进不了root
- 如何查看电脑的SHA1值
- 类的高级概念
- 反射、类加载与垃圾回收
- JAVA多线程和并发基础面试问答
- 浏览器缓冲机制集
- 求局部最大值
- VS2012无法打开文件“kernel32.lib”问题的解决办法
- Android Studio生成.so库
- 数据结构—单链表—直接插入排序
- 利用Navicat for Mysql创建数据库
- HOOK钩子机制