public boolean getPath(int x,int y,ArrayList<Point> path)
{
Point p=new Point(x,y);
path.add(p);
if(x==0 && y==0)
{
return true;//找到一条路径
}
boolean success=false;
if(x>=1 && isFree(x-1,y))//试着向左
{
success=getPath(x-1,y,path);//可行,向左走
}
if(!success && y>=1 && isFree(x,y-1))//试着向上
{
success=getPath(x,y-1,path);//可行,向上走
}
if(!success)
{
path.add(p);//错了,最好不要再走这里
}
return success;
}
public boolean getPath(int x,int y,ArrayList<Point> path,Hashtable<Point,Boolean> cache)
{
Point p=new Point(x,y);
if(cache.containsKey(p))//已访问过这个点
{
return cache.get(p);
}
path.add(p);
if(x==0 && y==0)
{
return true;//找到一条路径
}
boolean success=false;
if(x>=1 && isFree(x-1,y))//试着向左
{
success=getPath(x-1,y,path,cache);//可行,向左走
}
if(!success && y>=1 && isFree(x,y-1))//试着向上
{
success=getPath(x,y-1,path,cache);//可行!向上走
}
if(!success)
{
path.add(p);//错了~,最好不要再走这里
}
cache.put(p,success);//缓存结果
return success;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。