CSP 2017_9_4 通信网络
来源:互联网 发布:室内布置设计软件 编辑:程序博客网 时间:2024/06/06 02:53
题目链接
DFS(AC)
import java.util.ArrayList;import java.util.Scanner;public class Main {static ArrayList<Integer> []adj;static int n, m;static int tol;static boolean []vis;static boolean [][]isLinked;public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt(); m = in.nextInt(); adj = new ArrayList[n+1]; vis = new boolean[n+1]; isLinked = new boolean[n+1][n+1]; for(int i = 1; i <= n; i++ ) { adj[i] = new ArrayList<>(); } tol = 0; for(int i = 1; i <= m; i++ ) { int a = in.nextInt(); int b = in.nextInt(); adj[a].add(b); } for(int i = 1; i <= n; ++i) { for(int j = 1; j <= n; ++j)//搜索每个点之前 要把vis置false vis[j] = false; dfs(i, i); } int i, j; for(i = 1; i <= n; ++i) { for(j = 1; j <= n; ++j) { if(!isLinked[i][j])//不满足条件 直接退出 break; } if(j == n+1) tol++; } System.out.println(tol); }public static void dfs(int v,int cur) {//核心vis[v] = true;isLinked[v][cur] = isLinked[cur][v] = true; //从cur开始搜的每个点 都是与其相连接的 可以通信for(int w:adj[v]) {//搜索 v的每个临接点if(!vis[w]) {dfs(w,cur);//注意 这里 cur实际上 只是 用于 记录搜索路径上的点 与最初的cur可以通信}}}}
另外 之前用的另一种思路 一直没有AC 先放上 有时间再找找原因
想着是从图的正向 和反向分别DFS 然后 如果 所有的 点 都被访问 说明 该点 可以与所有点通信
但是 不能AC 还没发现问题在哪。。。
package CSP2017_9;import java.util.ArrayList;import java.util.Scanner;public class Main {static ArrayList<Integer> []adj;static ArrayList<Integer> []list;static int n, m;static int tol;static boolean []vis;public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt(); m = in.nextInt(); adj = new ArrayList[n+1]; list = new ArrayList[n+1]; vis = new boolean[n+1]; for(int i = 1; i <= n; i++ ) { list[i] = new ArrayList<>(); } for(int i = 1; i <= n; i++ ) { adj[i] = new ArrayList<>(); } tol = 0; for(int i = 1; i <= m; i++ ) { int a = in.nextInt(); int b = in.nextInt(); adj[a].add(b); list[b].add(a); } for(int i = 1; i <= n; i++ ) { int cnt = 0; dfs(i,adj); dfs(i,list); for(int j = 1; j <= n; j++ ) { if(vis[j]) cnt++; vis[j] = false; } if(cnt == n) { tol++; //System.out.println("point:" + i); } } System.out.println(tol); }public static void dfs(int cur, ArrayList<Integer> []adj) {vis[cur] = true;for(int w : adj[cur]) {if(!vis[w]) {dfs(w,adj);}}}}
阅读全文
0 0
- CSP 2017_9_4 通信网络
- csp 2014_9_4 最优配餐
- CCF-CSP 通信网络 JAVA 201709-4 100分
- CSP 2017-09
- CSP 2017-03
- csp 2017_3_3 markdown
- CSP
- CSP
- CCF CSP 网络延时 树的直径
- 2017/4/3 csp-Markdown
- csp-2017-3 分蛋糕
- csp-2017-3 学生排队
- [解答]CCF-通信网络-2017
- 网络通信
- 网络通信
- 网络通信
- 网络通信
- 网络通信
- 牛客练习赛7 E 珂朵莉的数列 (只有思路)
- Ubuntu下搭建FTP服务器图解
- 转载:Spring boot (三):Spring boot中Redis的使用
- Centos下部署firekylin博客系统
- 2017你认为值得推荐的技术书
- CSP 2017_9_4 通信网络
- python下的虚拟环境(virtualenv)安装
- 汉字字符串与16进制互转
- dubbo+zookeeper 分布式项目搭建
- BAT、360、新浪 小米 网易等大公司开源项目
- BottomTabBar底部导航模版
- 9*9乘法表
- 地球村计算机公司工作总结
- 转载:Spring Boot (四):thymeleaf使用详解