package br.com.caelum.restfulie.maze;
import java.util.HashSet;
import java.util.Set;
import java.util.Stack;
import br.com.caelum.restfulie.Link;
import br.com.caelum.restfulie.Restfulie;
import br.com.caelum.restfulie.http.Headers;
/**
*
* @author jose donizetti
*/
public class Maze {
public static void main(String[] args) {
//stealing guilherme silveira algorithm
Headers headers = Restfulie.at("http://amundsen.com/examples/mazes/2d/five-by-five/").accept("application/xml").get().getHeaders();
Set<String> visited = new HashSet<String>();
Stack<Link> path = new Stack<Link>();
Link link = null;
int steps = 0;
while(!(headers.getLink("exit") != null)) {
link = find(visited,"start north south east west",headers);
if(link == null) {
path.pop();
link = path.pop();
}
path.add(link);
visited.add(link.getHref());
System.out.println(link);
headers = link.follow().get().getHeaders();
steps++;
}
System.out.println("steps = " + steps);
}
private static Link find(Set<String> visited, String string, Headers headers) {
String[] directions = string.split("\\s++");
for(String direction : directions) {
Link link = headers.getLink(direction);
if((link != null) && (!visited.contains(link.getHref()))){
return link;
}
}
return null;
}
}