疯狂游戏3.1第三题解法
大家帮忙看看有什么问题?还有没有别的解法,因为是考试完静下来才做出来的,不知道对不对。。也没考虑有向图成环的问题。
第二题直接print("1")就能过50+%,还有老哥用random()%2过了60+的,真神了。。。
public class test202031 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
String[] split = s.split("\\|");
// list为所需要匹配的开始节点
char[] c = split[1].toCharArray();
List<String> list = new ArrayList<String>();
for (int i = 0; i < c.length; i++) {
if (c[i] <= '9' && c[i] >= '0') {
list.add(c[i] + "");
}
}
char[] d = split[0].toCharArray();
List<String> list2 = new ArrayList<String>();
for (int i = 0; i < d.length; i++) {
if (d[i] <= '9' && d[i] >= '0') {
list2.add(d[i] + "");
}
}
// map为有向图的指向
Map<String, List<String>> map = new HashMap<>();
for (int i = 0; i < list2.size(); i = i + 2) {
if (map.get(list2.get(i)) == null) {
List<String> list3 = new ArrayList<String>();
int m = i + 1;
list3.add(list2.get(m));
map.put(list2.get(i), list3);
} else {
List<String> list3 = map.get(list2.get(i));
int m = i + 1;
list3.add(list2.get(m));
map.put(list2.get(i), list3);
}
}
System.out.println(map.toString());
//end为匹配的最终节点
String end = split[2];
for (String s1 : list) {
getResult(map, s1, end, new ArrayList<String>());
}
System.out.println(set.toString());
}
public static Set<String> set = new HashSet<>();
//递归思路就是先从起始点开始的点加到list,再对list中的点进行下一步的递归,如果最终匹配到最终点了就把整个路径加到set中
public static void getResult(Map<String, List<String>> map, String start, String end, List<String> list) {
if (start.equals(end)) {
list.add(end);
set.addAll(list);
return;
}
list.add(start);
List<String> list1 = map.get(start);
if (list1 != null) {
for (String s : list1) {
getResult(map, s, end, list);
}
}
}
}
