老鼠走迷宫(栈+纯暴力搜索)

思路:首先用二维数组建一个迷宫,0可以走,1不可以走,然后从第一个位置开始走,先向下走,在向右走,向左走,向上走,走过的位置标记一下,储存到栈里面,然后每到一个位置都判断一下它是不是还能继续向前走(不能向前走的话就取出栈顶元素并向后退一步),然后一直走直到能够走到终点。

这种方法是暴力的深搜法,只能求到一种路径。

package SearchRat;
public class RatTest {
public static void main(String [] args)
{
	int m=14;
	int n=15;//迷宫的起始位置
	//创建迷宫
	int [][] a=new int[16][17];
	for(int i=0;i<16;i++)
		for(int j=0;j<17;j++)
			a[i][j]=0;
	for(int i=0;i<17;i++)a[0][i]=1;
	for(int i=0;i<17;i++)a[15][i]=1;
	for(int i=0;i<16;i++)a[i][0]=1;
	for(int i=0;i<16;i++)a[i][16]=1;
	    a[1][11]=1;
	    a[2][2]=1;
	    for(int i=5;i<11;i++)a[2][i]=1;
	    a[3][2]=1;
	    a[3][4]=1;a[3][5]=1;
	    a[4][2]=1;a[4][3]=1;a[4][4]=1;
	    a[5][5]=1;for(int i=9;i<14;i++)a[5][i]=1;
	    a[6][2]=1; a[6][3]=1; a[6][4]=1; a[6][13]=1;
	    a[7][2]=1;a[7][3]=1;
	    a[8][2]=1;a[8][3]=1;a[8][8]=1;a[8][10]=1;a[8][12]=1;a[8][14]=1;a[8][15]=1;
	    a[9][5]=1;
	    for(int i=10;i<14;i++){a[i][2]=1;a[i][3]=1;}a[14][3]=1;a[10][7]=1;
	    a[11][6]=1;a[11][7]=1;a[11][12]=1;
	    for(int i=7;i<13;i++)a[12][i]=1;
	    a[13][12]=1;a[14][13]=1;
	    
       
	    for(int i=0;i3)
	    	{ 
	    	  i=stack.back.getLine();
	    	  j=stack.back.getRaw();
	    	  a[stack.top.getLine()][stack.top.getRaw()]=1;
	    	  stack.OutStack();
	    	}
	    }
	 
	    stack.StackPrint();
	    System.out.println("(14,15)");
}
}
package SearchRat;

public class SearchStack {
	public Node head;
	public Node pointer;
	public Node top;
	public Node back;
public  SearchStack()
{
  head=new Node();
  Node node=new Node(1,1);
  head.LinkNext(node);
  top=node;
  back=top;
  
}
public void InStack(Node node)
{
	top.LinkNext(node);
	back=top;
	top=node;
}
public void OutStack()
{
	pointer=head.next();
	Node  q=pointer;
	Node q1=q;
	while(pointer.next()!=null)
	{
		q1=q;
      q=pointer;
      pointer=pointer.next();
	}
	top=q;
	back=q1;
	q.LinkNext(null);
	
}
public void StackPrint()
{
	pointer=head.next();
	int i=0;
	while(pointer!=top)
	{
		System.out.print("("+pointer.getLine()+","+pointer.getRaw()+")-->");
		pointer=pointer.next();
		i++;
		if(i==5)
		{
			System.out.println();
			i=0;
		}
	}
	pointer=top;
	System.out.print("("+pointer.getLine()+","+pointer.getRaw()+")-->");
}
}
class Node{
	Node next;
	int line;
	int raw;
	public Node(int line,int raw){
		this.line=line;
		this.raw=raw;
	}
	public Node()
	{
		
	}
	public int getLine()
	{
		return this.line;
	}
	public int getRaw()
	{
		return this.raw;
	}
	public void LinkNext(Node node)
	{
		this.next=node;
	}
	public Node next()
	{
		return this.next;
	}
	
}

运行结果:

老鼠走迷宫(栈+纯暴力搜索)_第1张图片

你可能感兴趣的:(数据结构与算法分析(java))