简单DFS路径搜索,理解深搜后就以不变应万变
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
public class Main
{
static Map<Integer, HashSet<Integer>> map = new HashMap<Integer, HashSet<Integer>>();
static boolean find = false;
static int start;
static int end;
static void dfs(int point)
{
if (find)
return;
HashSet<Integer> adjs = map.get(point);
if (adjs != null)
{
for (int adj : adjs)
{
if (adj == end)
{
find = true;
break;
}
dfs(adj);
}
}
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n, count = 0;
while ((n = sc.nextInt()) != 0)
{
start = end = 0;
map.clear();
find = false;
for (int i = 0; i < n; i++)
start = start * 10 + sc.nextInt();
for (int i = 0; i < n; i++)
end = end * 10 + sc.nextInt();
int next;
while ((next = sc.nextInt()) != -1)
{
int pa = next, pb = 0;
for (int i = 0; i < n - 1; i++)
pa = pa * 10 + sc.nextInt();
for (int i = 0; i < n; i++)
pb = pb * 10 + sc.nextInt();
HashSet<Integer> adjs = map.get(pa);
if (adjs == null)
{
adjs = new HashSet<Integer>();
map.put(pa, adjs);
}
adjs.add(pb);
}
dfs(start);
System.out.format("Maze #%d can%s be travelled\n", ++count,
find ? "" : "not");
}
}
}