1 Clone Graph   1  copy ervery nodes by bfs  2  add neighbors

    public UndirectedGraphNode cloneGraph(UndirectedGraphNode node)
{
if (node == null) {
return node;
} List<UndirectedGraphNode> nodes = new ArrayList<>();
Map<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<>();
nodes.add(node);
map.put(node, new UndirectedGraphNode(node.label)); int start = ;
while (start < nodes.size()) {
UndirectedGraphNode head = nodes.get(start++);
for (int i = ; i < head.neighbors.size(); i++) {
UndirectedGraphNode neighbor = head.neighbors.get(i);
if (!map.containsKey(neighbor)) {
nodes.add(neighbor);
map.put(neighbor, new UndirectedGraphNode(neighbor.label));
}
}
} for (int i = ; i < nodes.size(); i++) {
UndirectedGraphNode newNode = map.get(nodes.get(i));
for (int j = ; j < nodes.get(i).neighbors.size(); j++) {
newNode.neighbors.add(map.get(nodes.get(i).neighbors.get(j)));
}
} return map.get(node);
}

2 Topological Sorting   1 store nodes and rudu  2 find nodes has 0 rudu  3 bfs

    public ArrayList<DirectedGraphNode> topSort(ArrayList<DirectedGraphNode> graph) {
// write your code here
ArrayList<DirectedGraphNode> result = new ArrayList<>();
Map<DirectedGraphNode, Integer> map = new HashMap<>(); for (DirectedGraphNode node : graph) {
for (DirectedGraphNode neighbor : node.neighbors) {
if (map.containsKey(neighbor)) {
map.put(neighbor, map.get(neighbor) + );
} else {
map.put(neighbor, );
}
}
} for (DirectedGraphNode node : graph) {
if (!map.containsKey(node)) {
result.add(node);
}
} int start = ;
while (start < result.size()) {
DirectedGraphNode node = result.get(start++);
for (DirectedGraphNode neighbor : node.neighbors) {
map.put(neighbor, map.get(neighbor) - );
if (map.get(neighbor) == ) {
result.add(neighbor);
}
}
} return result;
}

3 Route Between Two Nodes in Graph   bfs   1  hold visited  and queue  2 bfs

    public boolean hasRoute(ArrayList<DirectedGraphNode> graph,
DirectedGraphNode s, DirectedGraphNode t) {
if (s == t) {
return true;
} Queue<DirectedGraphNode> queue = new LinkedList<>();
Set<DirectedGraphNode> visited = new HashSet<>();
queue.add(s);
visited.add(s); while (!queue.isEmpty()){
DirectedGraphNode node = queue.poll();
for (DirectedGraphNode neighbor : node.neighbors) {
if (visited.contains(neighbor)) {
continue;
}
queue.add(neighbor);
visited.add(neighbor);
if (neighbor == t) {
return true;
}
}
} return false;
}

4 N-Queens

    public ArrayList<ArrayList<String>> solveNQueens(int n)
{
// write your code here
ArrayList<ArrayList<String>> res = new ArrayList<>();
search(res, new ArrayList<Integer>(), n);
return res;
}
void search(ArrayList<ArrayList<String>> res, ArrayList<Integer> cols, int n) {
if (cols.size() == n) {
res.add(drawChessboard(cols));
return;
} for (int i = ; i < n; i++) {
if (!isValid(cols, i)) {
continue;
}
cols.add(i);
search(res, cols, n);
cols.remove(cols.size() - );
}
} ArrayList<String> drawChessboard(List<Integer> cols) {
ArrayList<String> result = new ArrayList<>();
for (int i = ; i < cols.size(); i++) {
StringBuilder sb = new StringBuilder();
for (int j = ; j < cols.size(); j++) {
sb.append(cols.get(i) == j ? "Q" : ".");
}
result.add(sb.toString());
}
return result;
} boolean isValid(List<Integer> cols, int colIndex) {
int row = cols.size();
for (int i = ; i < cols.size(); i++) {
if (cols.get(i) == colIndex) {
return false;
} if (i + cols.get(i) == row + colIndex) {
return false;
} if (i - cols.get(i) == row - colIndex) {
return false;
}
}
return true;
}

5 Word Ladder

   public int ladderLength(String start, String end, Set<String> dict)
{
if (dict == null) {
return ;
} if (start.equals(end)) {
return ;
} dict.add(end);
Set<String> visited = new HashSet<>();
Queue<String> queue = new LinkedList<>();
queue.add(start);
int length = ; while (!queue.isEmpty()) {
length++;
int size = queue.size();
for (int i = ; i < size; i++) {
String word = queue.poll();
for (String newWord: getNextWords(word, dict)) {
if (visited.contains(newWord)) {
continue;
} if (newWord.equals(end)) {
return length;
} visited.add(newWord);
queue.add(newWord);
}
}
}
return ;
} List<String> getNextWords(String word, Set<String> dict) {
List<String> result = new ArrayList<>();
for (char c = 'a'; c <= 'z'; c++) {
for (int i = ; i < word.length(); i++) {
if (c == word.charAt(i)) {
continue;
}
String newWord = replace(word, i, c);
if (dict.contains(newWord)) {
result.add(newWord);
}
}
}
return result;
} String replace(String word, int i, char c) {
char[] arr = word.toCharArray();
arr[i] = c;
return new String(arr);
}

6 Word Ladder

public class Solution {
/**
* @param start, a string
* @param end, a string
* @param dict, a set of string
* @return a list of lists of string
*/
public List<List<String>> findLadders(String start, String end, Set<String> dict) {
List<List<String>> result = new ArrayList<>();
Map<String, Integer> distance = new HashMap<>();
Map<String, List<String>> map = new HashMap<>(); dict.add(start);
dict.add(end); bfs(start, end, dict, distance, map); List<String> path = new ArrayList<>(); dfs(start, end, result, distance, map, path); return result;
} void dfs(String start, String cur, List<List<String>> result, Map<String, Integer> distance,
Map<String, List<String>> map, List<String> path) {
path.add(cur);
if (cur.equals(start)) {
Collections.reverse(path);
result.add(new ArrayList<>(path));
Collections.reverse(path);
} else {
for (String word : map.get(cur)) {
if (distance.containsKey(word) && distance.get(word) + == distance.get(cur)) {
dfs(start, word, result, distance, map, path);
}
}
}
path.remove(path.size() - );
} void bfs(String start, String end, Set<String> dict, Map<String, Integer> distance,
Map<String, List<String>> map) { Queue<String> queue = new LinkedList<>();
queue.offer(start);
distance.put(start, ); for(String word : dict) {
map.put(word, new ArrayList<String>());
} while (!queue.isEmpty()) {
String word = queue.poll();
for (String newWord: getNextWords(word, dict)) {
map.get(newWord).add(word);
if (!distance.containsKey(newWord)) {
distance.put(newWord, distance.get(word) + );
queue.offer(newWord);
}
}
}
} List<String> getNextWords(String word, Set<String> dict) {
List<String> result = new ArrayList<>();
for (char c = 'a'; c <= 'z'; c++) {
for (int i = ; i < word.length(); i++) {
if (c == word.charAt(i)) {
continue;
}
String newWord = replace(word, i, c);
if (dict.contains(newWord)) {
result.add(newWord);
}
}
}
return result;
} String replace(String word, int i, char c) {
char[] arr = word.toCharArray();
arr[i] = c;
return new String(arr);
}
}

7 Palindrome Partitioning

     public ArrayList<ArrayList<String>> partition(String s) {
ArrayList<ArrayList<String>> res = new ArrayList<>();
ArrayList<String> path = new ArrayList<>();
dfs(s, , path, res);
return res;
}
void dfs(String s, int start, ArrayList<String> path, ArrayList<ArrayList<String>> res) {
if (start == s.length()) {
res.add(new ArrayList<>(path));
return;
}
for (int i = start; i < s.length(); i++) {
if (isValid(s, start, i)){
path.add(s.substring(start, i + ));
dfs(s, i + , path, res);
path.remove(path.size() - );
}
}
}
boolean isValid(String s, int left, int right) {
while (left < right) {
if (s.charAt(left++) != s.charAt(right--)) {
return false;
}
}
return true;
}

BFS vs DFS的更多相关文章

  1. HDU-4607 Park Visit bfs | DP | dfs

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4607 首先考虑找一条最长链长度k,如果m<=k+1,那么答案就是m.如果m>k+1,那么最 ...

  2. BFS和DFS详解

    BFS和DFS详解以及java实现 前言 图在算法世界中的重要地位是不言而喻的,曾经看到一篇Google的工程师写的一篇<Get that job at Google!>文章中说到面试官问 ...

  3. 算法录 之 BFS和DFS

    说一下BFS和DFS,这是个比较重要的概念,是很多很多算法的基础. 不过在说这个之前需要先说一下图和树,当然这里的图不是自拍的图片了,树也不是能结苹果的树了.这里要说的是图论和数学里面的概念. 以上概 ...

  4. hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  5. 算法学习之BFS、DFS入门

    算法学习之BFS.DFS入门 0x1 问题描述 迷宫的最短路径 给定一个大小为N*M的迷宫.迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.如果不能到 ...

  6. 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/19617187 图的存储结构 本文的重点在于图的深度优先搜索(DFS)和广度优先搜索(BFS ...

  7. ACM__搜素之BFS与DFS

    BFS(Breadth_First_Search) DFS(Depth_First_Search) 拿图来说 BFS过程,以1为根节点,1与2,3相连,找到了2,3,继续搜2,2与4,相连,找到了4, ...

  8. BFS和DFS算法

    昨晚刚昨晚华为笔试题,用到了BFS和DFS,可惜自己学艺不精,忘记了实现原理,现在借用大佬写的内容给自己做个提高 转自:https://www.jianshu.com/p/70952b51f0c8 图 ...

  9. 通俗理解BFS和DFS,附基本模板

    1.BFS(宽度优先搜索):使用队列来保存未被检测的节点,按照宽度优先的顺序被访问和进出队列 打个比方:(1)类似于树的按层次遍历 (2)你的眼镜掉在了地上,你趴在地上,你总是先摸离你最近的地方,如果 ...

  10. [Algorithms] Graph Traversal (BFS and DFS)

    Graph is an important data structure and has many important applications. Moreover, grach traversal ...

随机推荐

  1. ZooKeeper学习第二期--ZooKeeper安装配置(转)

    转载来源:https://www.cnblogs.com/sunddenly/p/4018459.html 一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪 ...

  2. git push 时 failed to push some refs 的解决方案

    我们在利用 GIt 上传代码的时候,往往会遇到这样一个问题,导致我们的代码没有办法正常上传到仓库中 造成这个问题的原因其实很简单,就是因为远程仓库和本地库不一致. 基于这样的一个问题,解决办法自然也就 ...

  3. Python自学day-6

    一.编程范式       编程:程序员用特定的语法.数据结构和算法告诉计算机如何执行任务的过程.实现任务有很多不同的方式,根据编程方式的特点进行归纳总结出来的编程方式类别,就叫编程范式.大多数语言只支 ...

  4. Java---使用EWS读取exchange邮件

    第一步: 下载EWS API相关包: 从如下路径下载EWS API包:http://code.msdn.microsoft.com/Exchange-EWS-Java-API-12-1a5a1143 ...

  5. 【python3两小时快速入门】入门笔记01:基础

    又要我搞爬虫了,这次的源网站使用的ajax加载数据,我用java爬下来的页面内容部分全都是空,虽然java也有插件,但是使用起来感觉很麻烦,所以,python!老子来了.    1. 版本:pytho ...

  6. 汇编入门二 一些概念与PC组件

    1.内存:想让CPU工作,必须提供指令与数据,而指令和数据存在于内存中. 2.指令和数据:有点抽象,上书(汇编语言 第二版): 3.存储单元:存储器(内存)被划分为多个存储单元,内个存储单元从0开始顺 ...

  7. Java学习笔记——Socket实现文件传输

    我越是逃离,却越是靠近你. 我越是背过脸,却越是看见你. 我从你开始, 我在你结束. 需求:实现局域网下socket传输文件. 客户端步骤: 1.建立与服务器的连接 2.创建client输出流 3.创 ...

  8. 【Flink】深入理解Flink-On-Yarn模式

    1. 前言 Flink提供了两种在yarn上运行的模式,分别为Session-Cluster和Per-Job-Cluster模式,本文分析两种模式及启动流程. 下图展示了Flink-On-Yarn模式 ...

  9. Analysis of requirement specification of parking management system

    Analysis of requirement specification of parking management system PURPOSE OF THE SYSTEM The parking ...

  10. Python入门基础(3 下)

    接着讲列表里面的一些操作吧 列表元素访问与计数 1.统计指定元素在列表中出现的次数使用count(),这就不必细说了,直接看代码,需要记住的是括号里面放的是元素 list = [1,5,5,5,5,8 ...