1. 有向图 找所有start node到end node之间的路径
输入是一个txt 形式如下:
A E
A : B C D.
B : C
C : E
D : B.
输出一个List<String> 是从A到E所有的path

题不难,主要是注意STDIN

 package pocketGems;

 import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set; public class PathFinder2 {
public static void main(String[] args)
throws FileNotFoundException, IOException {
String filename = "C:/Users/yang liu/workspace/Interview2017/src/pocketGems/input_1.txt";
if (args.length > 0) {
filename = args[0];
} List<String> answer = parseFile(filename);
System.out.println(answer);
} static List<String> parseFile(String filename)
throws FileNotFoundException, IOException {
/*
* Don't modify this function
*/
BufferedReader input = new BufferedReader(new FileReader(filename));
List<String> allLines = new ArrayList<String>();
String line;
while ((line = input.readLine()) != null) {
allLines.add(line);
}
input.close(); return parseLines(allLines);
} static List<String> parseLines(List<String> allLines) {
HashMap<String, HashSet<String>> graph = new HashMap<String, HashSet<String>>();
Set<String> visited = new HashSet<String>();
String src = allLines.get(0).split(" ")[0];
String dst = allLines.get(0).split(" ")[1];
for (int i=1; i<allLines.size(); i++) {
String line = allLines.get(i);
String node = line.trim().split(":")[0].trim();
String[] neibors = line.split(":")[1].trim().split(" ");
graph.put(node, new HashSet<String>());
for (String nb : neibors) {
if (nb.length() != 0) graph.get(node).add(nb);
}
} List<String> res = new ArrayList<String>();
visited.add(src);
helper(res, src, src, dst, visited, graph);
return res;
} static void helper(List<String> res, String path, String cur, String dst, Set<String> visited, HashMap<String, HashSet<String>> graph) {
if (cur.equals(dst)) {
res.add(path);
return;
}
HashSet<String> neibors = graph.get(cur);
if (neibors != null) {
for (String each : neibors) {
if (visited.contains(each)) continue;
visited.add(each);
helper(res, path+each, each, dst, visited, graph);
visited.remove(each);
}
}
}
}

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. POJ 1185 炮兵阵地 【状压DP】

    <题目链接> 题目大意: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平 ...

  2. XIV Open Cup named after E.V. Pankratiev. GP of America

    A. Ancient Diplomacy 建图,同色点间边权为$0$,异色点间边权为$1$,则等价于找一个点使得到它最短路最长的点的最短路最小,Floyd即可. 时间复杂度$O(n^3)$. #inc ...

  3. vue学习:安装及创建项目

    1.先安装npm 参考链接:https://www.cnblogs.com/Hao-Killer/p/7235398.html 查看npm版本:在终端输入:npm -v 2.在安装vue # 安装vu ...

  4. [LeetCode] Minimum Swaps To Make Sequences Increasing 使得序列递增的最小交换

    We have two integer sequences A and B of the same non-zero length. We are allowed to swap elements A ...

  5. vue菜鸟从业记:没准备好的面试,那叫尬聊

    最近我的朋友王小闰参加了一场面试,在他填写简历表的时候,排在他前面的应聘者正在旁边邻桌接受来自面试官的检验. 王小闰边写边想,这不就是一会儿要面试自己的前端leader么,现在面试官提问的一些面试题会 ...

  6. java代码生成Excel文件3000条自定义属性的的域账户名

    一个项目为了测试需要模拟3000条域用户,将数据保存在Excel表格,然后导入到与服务器里. 我们今天要做的是自动生成3000条数据,并将这些数据保存在excel表格里面. 需要jar包:poi-3. ...

  7. css样式兼容各个浏览器时的部分总结

    [本文基本是在网络转发过来的,网站就忘记了,这文本都是保存在自己电脑本地的,还有些自己添加了些内容,这内容还会有不断的完善和更行的] 什么是浏览器兼容:当我们使用不同的浏览器(Firefox IE7 ...

  8. zhuan: WAN simulating tool - Netem : command tc qdisc

    Last weekly meeting we talked about a WAN simulating tool in order to test WPG, I find a great tool ...

  9. ping vs telnet, what is the difference between them and when to use which?

    Ping is an ICMP protocol. Basically any system with TCP/IP could respond to ICMP calls if they were ...

  10. 为Vue.js添加友好日志

    const isDebugEnabled = process.env.NODE_ENV !== "production"; const isInfoEnabled = true; ...