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;

}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/245203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 13:06
下一篇 2024-12-12 13:06

相关推荐

  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论