博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSP 2015 03 04 网络延时 DFS BFS
阅读量:4217 次
发布时间:2019-05-26

本文共 4092 字,大约阅读时间需要 13 分钟。

一 、 DFS

#include
#include
#include
#define MAX 20005using namespace std;int m, n;vector
g[MAX];int max_i = 0;int max_s = 0;int visit[MAX] = {0};void dfs(int cur, int s) { if(s > max_s){ max_s = s; max_i = cur; } for(int i = 0; i < g[cur].size(); i++ ){ int v = g[cur][i]; if(visit[v] == 0){ visit[v] = 1; dfs(v, s+1); visit[v] = 0; } } return ; } int main() { cin >> m >> n; int x; for(int i = 2; i <= m+n; i++ ){ cin >> x; g[i].push_back(x); //区别与 普通数组的 矩阵 这里 模拟邻接表 g[x].push_back(i); } visit[1] = 1; dfs(1, 0); int temp = max_i; max_i = 0; max_s = 0; memset(visit, 0, sizeof(visit));//很重要 不要忘记 dfs(temp, 0); cout << max_s; return 0; }

 

二 、 BFS

 

#include
#include
#include
#include
#define MAX 20005using namespace std;int m, n;vector
g[MAX];queue
que;int max_i = 0;int max_s = 0;int dist[MAX] = {0}; //记录 int visit[MAX] = {0};void bfs(int cur) { que.push(cur); while(!que.empty()){ int v = que.front(); que.pop();//记得 及时 出队 for(int i = 0; i < g[v].size(); i++ ){ int xx = g[v][i]; if(visit[xx] == 0){ que.push(xx); dist[xx] = dist[v] + 1; visit[xx] = 1; } } } } int main() { cin >> m >> n; int x; for(int i = 2; i <= m+n; i++ ){ cin >> x; g[i].push_back(x); g[x].push_back(i); } visit[1] = 1; bfs(1); for(int i = 1; i <= m+n; i++ ){ if(dist[i] > max_s){ max_i = i; max_s = dist[i]; } } memset(visit, 0, sizeof(visit));//很重要 memset(dist, 0, sizeof(dist));//都要 置为0 bfs(max_i); for(int i = 1; i <= m+n; i++ ){ if(dist[i] > max_s){ max_i = i; max_s = dist[i]; } } cout << max_s; return 0; }

Java DFS

 

import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;import java.util.List;import java.util.Scanner;public class Main {	List
[]list; boolean []visit; int max_i; int max_s; public static void main(String[] args) { new Main().run(); } public void run() { Scanner in = new Scanner(System.in); int n, m; n = in.nextInt(); m = in.nextInt(); list = new LinkedList[m+n+1];//创建时候不能带具体类型 visit = new boolean[m+n+1]; Arrays.fill(visit, false); for(int i = 0; i < list.length; i++ ) { list[i] = new LinkedList<>(); } int x; for(int i = 2; i <= m+n; i++ ) { x = in.nextInt(); list[i].add(x); list[x].add(i); } visit[1] = true; dfs(1, 0); int temp = max_i; Arrays.fill(visit, false); dfs(temp, 0); System.out.println(max_s); } public void dfs(int cur, int s) { if(s > max_s) { max_i = cur; max_s = s; } for(int i = 0; i < list[cur].size(); i++ ) { int v = list[cur].get(i); if(!visit[v]) { visit[v] = true; dfs(v, s+1); } } }}

 

Java BFS

 

import java.util.Arrays;import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class Main {	LinkedList
[]list; boolean []visit; int dist[]; int max_s; int max_i; public static void main(String[] args) { new Main().run(); } public void run() { Scanner in = new Scanner(System.in); int n = in.nextInt(); int m = in.nextInt(); list = new LinkedList[m+n+1]; visit = new boolean[m+n+1]; dist = new int[m+n+1]; Arrays.fill(visit, false); for(int i = 0; i < list.length; i++ ) { list[i] = new LinkedList<>(); } int x; for(int i = 2; i <= m+n; i++ ) { x = in.nextInt(); list[i].offer(x); list[x].offer(i); } Arrays.fill(dist, 0); max_i = 1; max_s = 0; visit[1] = true; bfs(1); for(int i = 1; i < dist.length; i++ ) { if(dist[i] > max_s) { max_s = dist[i]; max_i = i; } } Arrays.fill(dist, 0); Arrays.fill(visit, false); bfs(max_i); max_s = 0; for(int i = 1; i < dist.length; i++ ) { if(dist[i] > max_s) { max_s = dist[i]; } } System.out.println(max_s); } public void bfs(int cur) { Queue
que = new LinkedList<>(); que.offer(cur); visit[cur] = true; while(!que.isEmpty()) { int v = que.poll(); for(int i = 0; i < list[v].size(); i++ ) { int t = list[v].get(i); if(!visit[t]) { visit[t] = true; que.offer(t); dist[t] = dist[v] + 1; } } } } }

 

 

 

 

 

 

 

 

 

转载地址:http://eoimi.baihongyu.com/

你可能感兴趣的文章
test-definitions/blob/master/auto-test/boost/boost.sh
查看>>
Java多态性理解
查看>>
Intellij Idea 工具在java文件中怎么避免 import .*包,以及import包顺序的问题
查看>>
IDEA Properties中文unicode转码问题
查看>>
Oracle中Blob转换成Clob
查看>>
Linux如何查看so中函数名
查看>>
自动管理代码的android.mk
查看>>
cocos2dx 2.2.6编译记录(1)
查看>>
makefile学习网站
查看>>
C 编写lua模块(1)
查看>>
Lua教程:Lua调用C/C++函数(4)
查看>>
win下创建win32控制台工程,执行lua脚本
查看>>
cocos2dx android启动错误
查看>>
eclipse: android rename package name
查看>>
cocos2dx c++调用java思想
查看>>
cocos2dx lua Node节点 私有数据存取
查看>>
lua math.ceil math.ceil
查看>>
cocos2dx CCNode计算node的大小
查看>>
cocos2dx 布局记录(1)
查看>>
lua 多行注释和取消多行注释
查看>>