您的位置:

java迷宫鼠,java老鼠走迷宫

本文目录一览:

求助 java一个二维数组代表迷宫。0代表道路 2表示墙壁。 假设老鼠会从数组[1][0]开始

这个可以用 堆栈 来完成。

用堆栈的基本思路就是。

设置一个起点A。将 A 入栈 。

从A开始找到第一个可以达到的点B。将 B 入栈 。

如果B无路可走。则在A点处重新换一个可达到的点。否则继续 2-3 。直到达到终点。或者五路可走。

详细的解释,这儿有一篇博文:

java老鼠迷宫代码难吗

非常难。思路:

1、设老鼠的行进路线都是优先选择下-右-上-左。

2、设老鼠很聪明,走过的路线走撒泡尿,表示鼠大爷到此一游,我们可以把数组的值改为3,表示走过,但走不通。

3、这是一个int[8][8]的二位数组,那么开始位置下标是1,1,结束位置是6,6。行和列分别用、j表示。

4、实际路线我们可以设置2表示,我们可以使用递归,让老鼠不断测试路线。

5、最后打印数组,看老鼠的实际路线。

java编程 老鼠走迷宫

简单点说叫做寻路,涉及到深度优先搜索和广度优先搜索,当然在存在类似“战争迷雾”效果的同时还要涉及到动态规划和回溯。

程序设计 老鼠走迷宫

#include stdio.h

#include stdlib.h

#include time.h

/*迷宫的数组*/

int maze[100][100];

/*迷宫的行数和列数*/

int m=7,n=7;

/*

*对迷宫进行初始化,用随机数产生迷宫

*/

void InitMaze()

{

    int i,j,temp;

srand((unsigned)time(NULL));

    for(i=1;i=m;i++)

        for(j=1;j=n;j++)

        {

            temp=rand()%100;

            if(temp30)

            {

                maze[i-1][j-1]=0;

            }else

            {

                maze[i-1][j-1]=1;

            }

        }

    maze[0][0]=0;

    maze[m-1][n-1]=9;

}

/*

*定义栈和栈的节点

*/

typedef struct Node

{

int x;

int y;

struct Node *next;

}Node,*Stack;

/*

*初始化Stack

*/

void InitStack(Node *Stack)

{

Stack=(Node *)malloc(sizeof(Node));

if(Stack==NULL)

{

  printf("分配空间失败\n");

  exit(0);

}else

{

  Stack-next=NULL;

}

}

/*

*压栈

*/

void push(Node *Stack,int x,int y)

{

Node *temp;

temp=(Node *)malloc(sizeof(Node));

if (!temp)

{

  printf("分配内存空间错误");

  return;

}

else

{

  temp-x=x;

  temp-y=y;

  temp-next=Stack-next;

  Stack-next=temp;

}

}

/*

*出栈

*/

void pop(Node *Stack,int *x,int *y)

{

Node *temp;

temp=Stack-next;

if(!temp){

  return;

}else{

  *x=temp-x;

  *y=temp-y;

}

Stack-next=temp-next;

free(temp);

}

/*

*判断栈是否为空

*/

int isEmpty(Node *Stasck)

{

return ((Stasck-next)==NULL);

}

/*

*判断从该点时候可以向其他方向移动,并返回移动的方向

*/

int pass(int i,int j)

{

/*右方向*/

if(jn-1(maze[i][j+1]==0||maze[i][j+1]==9))

{

  return 2;

}

/*下方向*/

if(im-1(maze[i+1][j]==0||maze[i+1][j]==9))

{

  return 3;

}

/*左方向*/

if(j=1(maze[i][j-1]==0||maze[i][j-1]==9))

{

  return 4;

}

/*上方向*/

if(i=1(maze[i-1][j]==0||maze[i-1][j]==9))

{

  return 5;

}

return -1;

}

/*

*对迷宫进行打印

*/

void printMaze()

{

int i=0,j=0;

printf("  ");

for(i=0;in;i++)

{

  if(i+19)

   printf("%d ",i+1);

  else

   printf(" %d",i+1);

}

printf("\n");

for(i=0;im;i++){

  if(i+19)

   printf("%d",i+1);

  else

   printf(" %d",i+1);

        for(j=0;jn;j++)

        {

            if(maze[i][j]==0||maze[i][j]==9||maze[i][j]==-1)

            {

                printf("a ");

            }

   else if(maze[i][j]==1)

            {

                printf("b ");

            }else

            if(maze[i][j]==2)

   {

    printf("D ");

   }else if(maze[i][j]==3)

   {

    printf("X ");

   }else if(maze[i][j]==4)

   {

    printf("A ");

   }else if(maze[i][j]==5)

   {

    printf("W ");

   }

        }

        printf("\n");

    }

}

/*

*对迷宫进行路径搜索

*数组的数字有以下含义

*0.该点没有被探索过,且可行

*1.该点不可行

*2.该点是可行的,且进行了向东的探索

*3.该点是可行的,且进行了向南的探索

*4.该点是可行的,且进行了向西的探索

*5.该点是可行的,且进行了向北的探索

*6.该点是入口

*9.该点是出口

*-1.该点已经遍历完毕四个方向,不能找到有效的路径,则置为-1

*/

void FindPath()

{

int curx=0,cury=0;

int count=0;

int flag=0;

Node *Stacks=NULL;

InitStack(Stacks);

do{

  if(maze[curx][cury]==9)

  {

   flag=1;

  }

  switch(pass(curx,cury)){

  case 2:

   maze[curx][cury]=2;

   push(Stacks,curx,cury);

   cury++;

   break;

  case 3:

   maze[curx][cury]=3;

   push(Stacks,curx,cury);

   curx++;

   break;

  case 4:

   maze[curx][cury]=4;

   push(Stacks,curx,cury);

   cury--;

   break;

  case 5:

   maze[curx][cury]=5;

   push(Stacks,curx,cury);

   curx--;

   break;

  case -1:

   maze[curx][cury]=-1;

   if(!isEmpty(Stacks))

    pop(Stacks,curx,cury);

   break;

  }

  count++;

}while(!isEmpty(Stacks)flag==0);

if(flag==1)

{

  printf("该迷宫的行走路径如下:\n");

  printMaze();

}else

{

  printf("\nSorry,该迷宫无解\n");

}

}

/*

*主函数

*要求输入m,n的值,要符合要求

*程序打印出生成的迷宫,然后进行寻找路径

*如果可以找到出口,则画出该路径

*如果该迷宫没有出口,则提示迷宫无解

*/

int main()

{

/*printf("请输入迷宫的行数m(大于0,小于100):");

scanf("%d",m);

printf("请输入迷宫的列数n(大于0,小于100):");

scanf("%d",n);

if(m0||m100||n0||n100){

  printf("输入数据错误,程序退出\n");

  exit(-1);

}*/

    InitMaze();

    printf("原迷宫为:\n");

printMaze();

FindPath();

getch();

return 0;

}