免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2519 | 回复: 1
打印 上一主题 下一主题

java写的迷宫问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-23 21:54 |只看该作者 |倒序浏览
/**
迷宫问题求解:
问题描述:
这是一个实验心理学的经典问题,心理学家把一只老鼠
从一个无顶盖的大盒子的入口出赶进迷宫。迷宫中设置
很多隔壁,对前进方向形成了多处障碍,心理学家在迷
宫的惟一出口处放置了一块奶酪,吸引老鼠在迷宫中寻
找到达出口的通路。

算法描述:
老鼠在行进过程中,对周围各方向进行探看,如果下一
跳不通,那么回到原地,看另个方向是不是可通的,如
果各个方向都是不通的那么这个迷宫无解。

**/
class Points
{
        int x,y,d;
        Points()
        {
                x=1;
                y=1;
                d=-1;
    }
}


class SeqStack
{
        private final int MAX=100;
        Points[] data=new Points[MAX];
        int top;

//构造函数
SeqStack()
        {
       top=-1;
        }



//检测栈是否为空
int Empty_Stack()
        {
                if(this.top==-1)
                {
                       
                        return 1;
                }
                else
                {
                       
                        return 0;
                }

        }



//压栈操作
        int push_Stack(Points x)
        {
                if (this.top==MAX-1)
                {
                        return 0;
                }
                else
                {
                        this.top++;
                        this.data[top]=x;
                        return 1;
                }

        }


//出栈操作
        Points pop_Stack()
        {
                Points bak;
                if (this.Empty_Stack()==1)
                {   
                        return null;
                }
                else
                {

                        bak=this.data[top];
                        top--;
                        return bak;
                }
        }

//为空判定
void judge()
        {
                if(this.Empty_Stack()==1)
          {
                System.out.println("栈中无元素!";
          }
          else
          {
                System.out.println("栈中有元素!";
           }

        }

        //取栈定元素
        Points top_SeqStack()
        {
                if (Empty_Stack()==1)
                {
                        return null;
                }
                else
                {
                        return this.data[top];
                }

        }

       
}
class Item
{
        int x;
        int y;
       
}


public class Maze  
{
public int path(int[][] a,Item move[])
{
        SeqStack s=new SeqStack();
        Points temp;
        int x,y,d,i,j;
           temp=new Points();
       s.push_Stack(temp);
           while(s.Empty_Stack()!=1)
                {
                  temp=s.pop_Stack();
                  x=temp.x;
                  y=temp.y;
                  d=temp.d+1;
                  while (d<
                  {
                          i=x+move[d].x;
                          j=y+move[d].y;
                          if (a[i][j]==0)
                          {
                                  temp.x=x;
                                  temp.y=y;
                                  temp.d=d;
                                  s.push_Stack(temp);
                                  x=i;
                                  y=j;
                                  a[i][j]=-1;
                                  if (x==8 && y==
                                  {
                                          return 1;
                                  }
                                  else
                                  {
                                          d=0;
                                  }
                                  
                          }
                          else
                      {
                                  d++;
                          }

                  }
                 
                }

return 0;
}



          



        public static void main(String[] args)
        {
                int a[][]=new int[8][8];
                int j=0,k;
                Maze maze=new Maze();
                Item move[]=new Item[8];
   /*
                move[0].x=0;
                move[0].y=1;
                move[1].x=1;
                move[1].y=1;
                move[2].x=1;
                move[2].y=0;
                move[3].x=1;
                move[3].y=-1;
                move[4].x=0;
                move[4].y=-1;
                move[5].x=-1;
                move[5].y=-1;
                move[6].x=-1;
                move[6].y=0;
                move[7].x=-1;
                move[7].y=1;*/

                /*if(maze.path(a,move)==1)
                {
                        System.out.println("NO!";
                }
                else
                {
                        System.out.println("Yes!";
                }*/
               
       
                System.out.println("Yes!";
        }
}

论坛徽章:
0
2 [报告]
发表于 2006-04-24 14:51 |只看该作者
看了一点儿, 太难懂了! 也没注释, 变量也看不出来是干什么的.你的Point的X,Y,Z都是做什么用的? 各值又代表什么意思?
觉有两个方法返回值不好(个人看法), 改成返回值为BOOLEAN型就好了!
这两个方法是SeqStack中的.

  1.     // 检测栈是否为空
  2.     boolean Empty_Stack()
  3.     {
  4.         if (this.top == -1)
  5.         {
  6.             return true;
  7.         }
  8.         else
  9.         {
  10.             return false;
  11.         }
  12.     }
复制代码



  1.     // 压栈操作
  2.     boolean push_Stack(Points x)
  3.     {
  4.         if (this.top == MAX - 1)
  5.         {
  6.             return false;
  7.         }
  8.         else
  9.         {
  10.             this.top++;
  11.             this.data[top] = x;
  12.             return true;
  13.         }
  14.     }
复制代码


看来楼主好像是编C/C++出身.  *(^_^)*

[ 本帖最后由 chouy 于 2006-4-24 14:54 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP