您可以将您的板表示为一个图形,其中包含一个坐标值作为键,一组坐标作为代表每个坐标邻居的值..example Map<Coordinate, HashSet<Coordinate> = new Hashmap<Coordinate, HashSet<Coordinate>();
。然后用每个坐标值作为键填充图形,并将它们各自的邻居作为它们的值。每当出现一个封闭的房间时,只需从它周围的每个坐标邻居中删除该坐标。
因此,如果您将坐标 (5,5) 作为阻塞房间,您将从 (4,5)s 邻居集、(5,4)s 邻居集、(6,5)s 邻居集中删除 (5,5) , 和 (5,6)s 的邻居集。这基本上不会让你再走这条路。
要填充图表,您可以使用两个循环:
for(int r = 0; r <= 10; r++){
for(int c = 0; c <= 10; c++){
HashSet<Coordinate> neighbors = new HashSet<Coordinate>();
if(r > 0){
neighbors.add(new Coordinate(r - 1, c));
}
if(r < 8){
neighbors.add(new Coordinate(r + 1, c));
}
if(c > 0){
neighbors.add(new Coordinate(r, c - 1));
}
if(c < 8){
neighbors.add(new Coordinate(r, c + 1));
}
graph.put((new Coordinate(r,c)), neighbors);
}
}
我希望这是你所要求的。