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/zh-tw/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

發表回復

登錄後才能評論