PAT (Advanced Level) 1013 Battle Over Cities (25 分)
发布日期:2021-06-29 12:22:27
浏览次数:2
分类:技术文章
本文共 1154 字,大约阅读时间需要 3 分钟。
序:
dfs求连通分量题目概述:
给出各边的连接关系,一开始是连通图。求去掉某个点之后的连通分量个数。分析:
1.用邻接矩阵+visit存储 2.对每个点进行一次dfs,将所有直接或间接与它相邻的点都置为true,一条条扩散出去 3.这里的dfs思路是先设置当前点visit为true再遍历其dfs遍历其邻居。#includeusing namespace std;int edge[1010][1010];bool visit[1010];int n, m, k;void dfs(int start){ visit[start] = true; for(int i = 1; i <= n; i++) { if(edge[start][i] == 1 && visit[i] == false) dfs(i); }}int main(){ cin >> n >> m >> k; int a, b, c; for(int i = 0; i < m; i++) { cin >> a >> b; edge[a][b] = edge[b][a] = 1; } for(int i = 0; i < k; i++) { int cnt = 0; fill(visit, visit + 1010, false);//每次都要初始化,注意这里最好全数组统一 cin >> c; visit[c] = true;//挖掉这个点 for(int j = 1; j <= n; j++) { if(visit[j] == false) { dfs(j); cnt++; } } printf("%d\n", cnt - 1); } return 0;}
总结:
1.fill那里最好把整个visit全部填满,即用1010,不要用n。用n会导致答案错误。由于是从1开始遍历的,所以一般要去到n+1,但经过实验发现最少也要n+3以上才行。因此,最好在写代码时避开边界,把数组开大一丢丢,再整体进行操作。 2.这是经典的图的dfs,思路就是先改visit,后面再dfs遍历所有邻居。外层引用时全部节点遍历一遍,同时要求遍历节点的visit为false。转载地址:https://bridge-killer.blog.csdn.net/article/details/115440501 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月11日 00时54分26秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
查看docker veth pair与宿主机上网卡的对应关系
2019-04-29
使用 GitLab CI 进行持续集成的一些踩坑
2019-04-29
企业云盘给贸易业带来新的效益
2019-04-29
Linux入门常用命令
2019-04-29
Spring整理
2019-04-29
SpringMvc加强
2019-04-29
初识Vue全家桶 Nuxt.js(一)
2019-04-29
基本路由及动态路由(二)
2019-04-29
视图:默认模板+默认布局(自定义布局)+nuxt.js页面(三)
2019-04-29
基于nuxt下asyncData,fetch发送axios请求(四)
2019-04-29
插件机制+自定义axios(五)
2019-04-29
Redis的学习之路
2019-04-29
Windows下Redies+GUI安装,使用Jedis与spring boot 整合
2019-04-29
Windows创建本地版本库(1)
2019-04-29
基于java的酒店管理系统的设计与实现
2019-04-29
基于WEB的仓库管理系统的设计与实现
2019-04-29
基于java的web聊天系统
2019-04-29
基于java的俄罗斯方块的设计与实现
2019-04-29
基于java的魂斗罗的设计
2019-04-29