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. C#批量裁剪图片

    有一批图片是全屏拷贝下来的,只需要保留指定区域的图片,用代码实现如下: Bitmap srcBmp = new Bitmap(fi.FullName); Bitmap dstBmp = srcBmp. ...

  2. Python的类及单例实现

    一.使用@property @property 的作用 将一个get方法变成一个属性 class

  3. hdu5706-GirlCat

    Problem Description As a cute girl, Kotori likes playing ``Hide and Seek'' with cats particularly.Un ...

  4. Python 中的单例模式

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  5. Android系统源代码目录结构 “Android源代码”“目录结构”

    在讲述Android源码编译的三个步骤之前,将先介绍Android源码目录结构,以便读者理清Android编译系统核心代码在Android源代码的位置. Android源代码顶层目录结构如下所示: ├ ...

  6. MongDB 数据结构

    Object  ID :Documents 自生成的 _id String: 字符串,必须是utf-8 Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True ...

  7. base64编解码

    //ZBBase64.h #include <string> class ZBase64{public:    /* 编码    DataByte       [in]输入的数据长度,以字 ...

  8. GMA Round 1 最短距离

    传送门 最短距离 在椭圆C:$\frac{x^2}{20^2}+\frac{y^2}{18^2}=1$上作两条相互垂直的切线,切线交点为P,求P到椭圆C的最短距离.结果保留6位小数. 设椭圆方程:$\ ...

  9. Python自学知识点----Day02

    Linux基本操作命令: 命令                                    作用                                     英文释义 ls    ...

  10. 单调栈+前缀和 || Nowcoder || 牛客小白月赛13 || 小A的柱状图

    题面:小A的柱状图 题解:无 代码: #include<cstdio> #include<cstring> #include<iostream> #define l ...