ZOJ-1129
来源:互联网 发布:java 取绝对值函数 编辑:程序博客网 时间:2024/06/16 16:22
粗看以为挺简单,细想还是需要点算法的。。字符串的map处理挺繁琐,感觉JAVA的集合类总不怎么好用。。反正基本思路就是BFS,通过那个最有名作者找各个作者与他的最短距离
import java.util.HashMap;import java.util.HashSet;import java.util.LinkedList;import java.util.Map;import java.util.Scanner;public class Main{static Map<String, HashSet<String>> map = new HashMap<String, HashSet<String>>();static Map<String, Integer> result = new HashMap<String, Integer>();static Map<String, Boolean> flag = new HashMap<String, Boolean>();static void relations(String[] authors){for (String author : authors){HashSet<String> set;if (!map.containsKey(author)){set = new HashSet<String>();map.put(author, set);}elseset = map.get(author);for (String s : authors)if (!s.equals(author))set.add(s);}}static void bfs(){LinkedList<String> queue = new LinkedList<String>();String start = "Erdos, P.";result.put(start, 0);flag.put(start, true);queue.addLast(start);while (!queue.isEmpty()){String s = queue.removeFirst();if (map.containsKey(s)){HashSet<String> set = map.get(s);int number = result.get(s);for (String relate : set){if (!flag.get(relate)){flag.put(relate, true);result.put(relate, number + 1);queue.addLast(relate);}}}}}public static void main(String[] args){Scanner sc = new Scanner(System.in);int count = 0;while (true){int p = sc.nextInt();int n = sc.nextInt();if (p == 0 && n == 0)break;sc.nextLine();map.clear();result.clear();flag.clear();for (int i = 0; i < p; i++){String s = sc.nextLine().split(":")[0];String ss[] = s.split(", ");String authors[] = new String[ss.length / 2];for (int j = 0; j < ss.length; j += 2){String temp = ss[j] + ", " + ss[j + 1];authors[j / 2] = temp;result.put(temp, Integer.MAX_VALUE);flag.put(temp, false);}relations(authors);}bfs();System.out.format("Database #%d\n", ++count);for (int i = 0; i < n; i++){String author = sc.nextLine();if (!result.containsKey(author)|| result.get(author) == Integer.MAX_VALUE)System.out.format("%s: infinity\n", author);elseSystem.out.format("%s: %d\n", author, result.get(author));}System.out.println();}sc.close();}}
0 0
- ZOJ-1129
- POJ 1129/ZOJ 1084
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- 二维OTSU算法快速实现
- 微软宣布.NET Native预览版 C#可编...[C#]
- c#与java中的byte
- HTTP协议——HyperText Transfer Protocol(超文本传输协议)
- 我的第一个游戏!
- ZOJ-1129
- OpenStack命令行工具与API
- 数塔 动态规划
- 程序员在面试中遇到的10大算法类型!(http://news.eoe.cn/17989.html)
- UITableView 简单总结
- 解决CodeSmith不能读取MySql数据库字段说明的问题
- 如何解决Error - cannot open input file C /postproc/nlscfg.inf fmerge for Windows CE (Release)
- 提取包含在演示文稿PPT中的音频文件
- 逆波兰式