1. 1. 有向图 找所有start nodeend node之间的路径
  2. 输入是一个txt 形式如下:
  3. A E
  4. A : B C D.
  5. B : C
  6. C : E
  7. D : B.
  8. 输出一个List<String> 是从AE所有的path

题不难,主要是注意STDIN

  1. package pocketGems;
  2.  
  3. import java.io.*;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.util.HashMap;
  7. import java.util.HashSet;
  8. import java.util.Set;
  9.  
  10. public class PathFinder2 {
  11. public static void main(String[] args)
  12. throws FileNotFoundException, IOException {
  13. String filename = "C:/Users/yang liu/workspace/Interview2017/src/pocketGems/input_1.txt";
  14. if (args.length > 0) {
  15. filename = args[0];
  16. }
  17.  
  18. List<String> answer = parseFile(filename);
  19. System.out.println(answer);
  20. }
  21.  
  22. static List<String> parseFile(String filename)
  23. throws FileNotFoundException, IOException {
  24. /*
  25. * Don't modify this function
  26. */
  27. BufferedReader input = new BufferedReader(new FileReader(filename));
  28. List<String> allLines = new ArrayList<String>();
  29. String line;
  30. while ((line = input.readLine()) != null) {
  31. allLines.add(line);
  32. }
  33. input.close();
  34.  
  35. return parseLines(allLines);
  36. }
  37.  
  38. static List<String> parseLines(List<String> allLines) {
  39. HashMap<String, HashSet<String>> graph = new HashMap<String, HashSet<String>>();
  40. Set<String> visited = new HashSet<String>();
  41. String src = allLines.get(0).split(" ")[0];
  42. String dst = allLines.get(0).split(" ")[1];
  43. for (int i=1; i<allLines.size(); i++) {
  44. String line = allLines.get(i);
  45. String node = line.trim().split(":")[0].trim();
  46. String[] neibors = line.split(":")[1].trim().split(" ");
  47. graph.put(node, new HashSet<String>());
  48. for (String nb : neibors) {
  49. if (nb.length() != 0) graph.get(node).add(nb);
  50. }
  51. }
  52.  
  53. List<String> res = new ArrayList<String>();
  54. visited.add(src);
  55. helper(res, src, src, dst, visited, graph);
  56. return res;
  57. }
  58.  
  59. static void helper(List<String> res, String path, String cur, String dst, Set<String> visited, HashMap<String, HashSet<String>> graph) {
  60. if (cur.equals(dst)) {
  61. res.add(path);
  62. return;
  63. }
  64. HashSet<String> neibors = graph.get(cur);
  65. if (neibors != null) {
  66. for (String each : neibors) {
  67. if (visited.contains(each)) continue;
  68. visited.add(each);
  69. helper(res, path+each, each, dst, visited, graph);
  70. visited.remove(each);
  71. }
  72. }
  73. }
  74. }

Pocket Gem OA: Path Finder的更多相关文章

  1. Pocket Gem OA: Log Parser

    time a given player spends actually connected to the network. We keep console logs of various game s ...

  2. gem安装时出现 undefined method `size' for nil:NilClass (NoMethodError) 的解决办法

    终端输入gem env 得到gem的PATH路径,比如 - GEM PATHS: - /usr/local/ruby/lib/ruby/gems/2.1.0 - /home/vagrant/.gem/ ...

  3. Gem/Bundle/Rvm

    做过Ruby项目的人可能有过我一样的感受,rubygems.org在中国的访问太慢了,每次我们bundle install都要等老长时间,而我们通过浏览器去下载对应的gems文件时却速度刷刷的... ...

  4. Java资源大全中文版(Awesome最新版)

    Awesome系列的Java资源整理.awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码分析.日志.第三方库.书籍.Java 站 ...

  5. 手把手教你编写Logstash插件

    使用过Logstash的朋友都知道,它强大的插件生态几乎覆盖了所有的开源框架.从基本的http.tcp.udp.file,到强大的kafa.redis.ganglia,还有丰富的解析工具,比如date ...

  6. PathFinding.js 寻路类神器

    最近有打算写个迷宫玩玩,无意中发下了这个库,很强大!又是开源在github的,并且有一个相当酷的demo.这个库不仅支持浏览器端的运行,而且可以运行在node.js上.怎么用到服务器上这里就不涉及了, ...

  7. 工具武装的前端开发工程师 Mac 软件清单

    Awesome Mac  这个仓库主要是收集非常好用的Mac应用程序.软件以及工具,主要面向开发者和设计师.有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章<工具武装的前端开发工程 ...

  8. Python基础:模块

    一.概述 二.导入语句 1.基本语法 2.推荐风格 三.模块 1.模块名 2.模块属性 3.可导出的公有属性 4.直接执行 四.包 1.包名 2.包属性 3.可导出的公有属性 4.其他 五.导入原理 ...

  9. awesome-java

    Awesome Java A curated list of awesome Java frameworks, libraries and software. Awesome Java Ancient ...

随机推荐

  1. iOS开发常用第三库

    字典转模型 1.(MJExtension) https://github.com/CoderMJLee/MJExtension 2.(YYModel) https://github.com/ibire ...

  2. InputString 转换成 BufferedImage 和 byte[]

    获取网络的一张图片,但是某种需要,要把获取的这段流输入换为BufferedImage流,有的地方还需要转换为byte[]. 获得图片地址,获得了一个图片输入流,例如: Url img = new UR ...

  3. C语言中使用bool

    声明 C语言中是没有bool类型的. 使用方法 参考: https://stackoverflow.com/q/1921539.

  4. Nginx实现URL重写

    本文利用Nginx实现URL重写,本文使用Nginx与静态页面配合重写URL. 1.准备工作. 结合本文场景,需要安装Nginx. 1.1 关于Linux系统安装Nginx可以参考我的文章---(传送 ...

  5. h5页面

    <!DOCTYPE html><html lang="utf-8"><head> <meta charset="UTF-8&qu ...

  6. JQuery 目录树jsTree插件用法

    PHP循环构造目录树结构 <ul> <php> function digui($fid,$level){ $class=M("wangpan_class") ...

  7. Mybatis_3.基于注解的增删改查

    1.实体类User.java public class User { private int id; private String name; private int age; //getter.se ...

  8. 20 由属性查询学习到的ArcMap、javaScripts API相关操作

    因项目需要,想要在属性查询的时候连同相关的图片一并查出来,但是因为要查询的图层众多,且字段不固定,而且还要方便后期维护,因此一个个单独配置并不是最优的解决方法 为实现这个功能,我想到如下几种解决方法 ...

  9. python全栈开发 * css 选择器 浮动 * 180808

    css 选择器 一.基本选择器 1.标签选择器 标签选择器可以选中所有的标签元素,比如div,ul,li ,p等等,不管标签藏的多深,都能选中,选中的是所有的,而不是某一个,所以说 "共性& ...

  10. 甘特图dhtmlx Gantt入门

    (以下截图来自别人的博客,来源地址已经忘记了,若后期找到会补充上来!) API地址:https://docs.dhtmlx.com/gantt/desktop__guides.html,这是英文的网页 ...