PAT1013
时间:2019-09-25
本文章向大家介绍PAT1013,主要包括PAT1013使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
思路分析:
这道题就是要去求一个图的联通分量数目。要求联通分量,当然就是得用BFS或者DFS来遍历图,以此来进行判断。
这道题中,我们会先得到一个图,接下来哪一个城市(节点)被占领,就不去考虑这个节点的相关信息来求联通分量。
避坑指南:
1.这道题给你的只是一个图,不要想多了,绝不是连通图,有可能有很多孤立的点点,所以一定要严格按照BFS或者DFS整个流程来
2.为了方便,我是从下标1才开始使用数组,所以有些地方要注意一下,比如循环、fill()的时候要注意范围
代码:
(1)BFS
int map[1001][1001]; int main(){ freopen("in.txt","r",stdin); int n,m,k; scanf("%d %d %d",&n,&m,&k); while(m--){ int from,to; scanf("%d %d",&from,&to); //scanf里面的逗号,wtf map[from][to]=1; map[to][from]=1; } while(k--){ int city; scanf("%d",&city); int tag[1000]; //存储要进行广度搜索的值 ,全部都要探测 for(int i=1;i<=n;++i) if(i!=city) tag[i]=1; int count=0; for(int i=1;i<=n;++i){ if(tag[i]==1){ count++; queue<int> q; //BFS队列 q.push(i); int set[1000]={0}; //存放已经出了BFS队列的值 set[city]=1; //这样city就永远都不会被考虑进来 while(!q.empty()){ int now=q.front(); q.pop(); set[now]=1; tag[now]=0; for(int j=1;j<=n;++j){ if(set[j]==0 && map[now][j]==1){ q.push(j); } } } } } printf("%d",count-1); if(k!=0) printf("\n"); } return 0; }
(2)DFS
int map[1001][1001]; bool visit[1001]; int n; void dfs(int node){ visit[node]=true; for(int i=1;i<=n;++i){ if(visit[i]==false && map[node][i]==1) dfs(i); } } int main(){ freopen("in.txt","r",stdin); int m,k; scanf("%d %d %d",&n,&m,&k); while(m--){ int from,to; scanf("%d %d",&from,&to); //scanf里面的逗号,wtf map[from][to]=1; map[to][from]=1; } while(k--){ int city; scanf("%d",&city); fill(visit,visit+(n+1),false); //这里不能只加n,因为我们实际从下标1才开始使用,所以要比实际多1 int count=0; visit[city]=true; for(int i=1;i<=n;++i){ if(visit[i]==false){ count++; dfs(i); } } printf("%d",count-1); if(k!=0) printf("\n"); } return 0; }
原文地址:https://www.cnblogs.com/chuan-chuan/p/11588418.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SAP ABAP CGLIB(Code Generation Library)的模拟实现
- 如何监听SAP CRM BOR事件
- 如何避免SAP订单保存后生成的中间件CSA inbound queue
- Java和ABAP单例(singleton)设计模式的攻与防
- JUnit 注解@SuiteClasses的工作原理
- 使用SAP CRM Mock framework进行单元测试
- ABAP Debugging Script(调试器脚本)使用的一些实际例子
- MySQL 8.0新特性 — 事务性数据字典与原子DDL
- Python基础之面向对象-继承
- [源码分析]ArrayList和LinkedList如何实现的?我看你还有机会!
- 使用Python实现平台自动打卡
- QT学习第4天:qt点击鼠标画一条直线(附源代码和程序)
- 跨站请求伪造——CSRF
- 13-6 编辑多个文件和保存
- 汇编基础