Pocket Gem OA: Path Finder
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的更多相关文章
- Pocket Gem OA: Log Parser
time a given player spends actually connected to the network. We keep console logs of various game s ...
- 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/ ...
- Gem/Bundle/Rvm
做过Ruby项目的人可能有过我一样的感受,rubygems.org在中国的访问太慢了,每次我们bundle install都要等老长时间,而我们通过浏览器去下载对应的gems文件时却速度刷刷的... ...
- Java资源大全中文版(Awesome最新版)
Awesome系列的Java资源整理.awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码分析.日志.第三方库.书籍.Java 站 ...
- 手把手教你编写Logstash插件
使用过Logstash的朋友都知道,它强大的插件生态几乎覆盖了所有的开源框架.从基本的http.tcp.udp.file,到强大的kafa.redis.ganglia,还有丰富的解析工具,比如date ...
- PathFinding.js 寻路类神器
最近有打算写个迷宫玩玩,无意中发下了这个库,很强大!又是开源在github的,并且有一个相当酷的demo.这个库不仅支持浏览器端的运行,而且可以运行在node.js上.怎么用到服务器上这里就不涉及了, ...
- 工具武装的前端开发工程师 Mac 软件清单
Awesome Mac 这个仓库主要是收集非常好用的Mac应用程序.软件以及工具,主要面向开发者和设计师.有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章<工具武装的前端开发工程 ...
- Python基础:模块
一.概述 二.导入语句 1.基本语法 2.推荐风格 三.模块 1.模块名 2.模块属性 3.可导出的公有属性 4.直接执行 四.包 1.包名 2.包属性 3.可导出的公有属性 4.其他 五.导入原理 ...
- awesome-java
Awesome Java A curated list of awesome Java frameworks, libraries and software. Awesome Java Ancient ...
随机推荐
- java代码获取多边形的中心点
package com.skjd.util; import java.util.ArrayList; import java.util.List; /** * 坐标以及电子围栏相关的工具类 * @au ...
- python经典书籍推荐:python编码规范
目录INF-qa Python 编码规范................................................................................ ...
- String与StringBuffer
转载于:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.htm l火之光 StringBuffer类和String一样,也用来 ...
- SQLServer 2014 内存优化表
内存优化表是 SQLServer 2014 的新功能,它是可以将表放在内存中,这会明显提升DML性能.关于内存优化表,更多可参考两位大侠的文章:SQL Server 2014新特性探秘(1)-内存数据 ...
- JavaScript中作用域和作用域链的简单理解(变量提升)
通过阅读<JS高级程序设计>这本书,对js中的作用域和作用域链知识有了初步的了解和认识,准备成笔记供大家参考,笔记中字数比较多,但个人认为叙述的挺详细的,所以希望读者耐心看.再者,本人了解 ...
- 实验四 (1):定义一个形状类(Shape)方法:计算周长,计算面积
(1)定义一个形状类(Shape)方法:计算周长,计算面积子类:矩形类(Rectangle) :额外的方法:differ() 计算长宽差圆形类(Circle)三角形类(Triangle)正方形类(Sq ...
- HBuilder 的使用
创建一个nui项目 打开index.html才能运行 查看夜神模拟器 创建App标题:mhe :在body中输入mhe让后回车,如果右侧不显示,Ctrl+s保存一下 创建标题:mhe 创建九宫格:mb ...
- __x__(36)0908第五天__背景 background
1. 背景 background: red url(img/cat.gif) repeat-x fixed; 2. 背景颜色 background-color: red; 3. 背景图片 backgr ...
- react_app 项目开发 (6)_后台服务器端-node
后台服务器端 负责处理前台应用提交的请求,并向前台返回 json 数据 前台应用 负责 展现数据与用户交互 发 ajax 请求与后台应用交互 yarn add axios /src/api/ajax. ...
- Linux 中进程的管理
Linux 的进程信号 1 HUP 挂起 2 INT 中断 3 QUIT 结束运行 9 KILL 无条件终止 11 SEGV 段错误 15 TERM 尽可能终止 17 STOP 无条件终止运 ...