真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

JAVA迷宮代碼堆棧算法 java 走迷宮

求助 java一個二維數組代表迷宮。0代表道路 2表示墻壁。 假設老鼠會從數組[1][0]開始

這個帶野可以用 堆棧 來完成。

網站建設哪家好,找創(chuàng)新互聯!專注于網頁設計、網站建設、微信開發(fā)、成都微信小程序、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯還提供了仙游免費建站歡迎大家使用!

用堆棧的基本思路就是。

設置一個起點A。將 A 入棧 。

從A開始找到第一個可以達到的點B。將 B 入棧 。

如果B無路可走。則談橋在A點處重新換一個可達到的點。否則繼續(xù) 2-3 。直到達到終點?;蛘呶迓房勺摺?/p>

詳細的解釋,含行猛這兒有一篇博文:

堆棧:迷宮老鼠問題,程序有點問題,求大神幫忙

你這個方法太復雜了,用回溯法原理上比較簡念薯螞單,你先把while((stack!=NULL)||((stack-row!=x2)(stack-col!=y2))){改成while(1)試試,不行的話,下面這個方法是我以前編寫的,你可以看看

#includestdio.h

#includestdlib.h

#define N 50

int **maze;

int row;

int col;

int stack[50];//存放路徑的棧

void CreateMaze()//用于動態(tài)創(chuàng)建迷宮

{

int i,j;

printf("請輸入迷宮的行數:");

scanf("%d",row);

printf("請輸入迷宮的列數:");

scanf("%d",col);

if(row=0||col=0)

{

printf("輸入的行數或列數不符合規(guī)則!\n");

exit(1);

}

//利用指針的指針動態(tài)創(chuàng)建二維數組

maze=(int **)malloc((row+2)*sizeof(int *));

for(i=0;irow+2;i++)

{

maze[i]=(int *)malloc((col+2)*sizeof(int));

}

//加邊墻

for(i=0;irow+2;i++)

{

maze[i][0]=1;

maze[i][col+1]=1;

}

for(i=0;icol+2;i++)

{

if(i==1)

{

maze[0][i]=0;

}

else maze[0][i]=1;

if(i==col)

{

maze[row+1][col]=0;

}

else maze[row+1][i]=1;

}

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

{

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

{

printf("請輸入第%d行的第%d個數:\n",i,j);

scanf("%d",maze[i][j]);

}

}

//輸入下一個當前加邊墻的迷宮,以驗證輸入是否正確

printf("輸入完仔埋畢!當前加邊墻的迷宮為:\n");

for(i=0;irow+2;i++)

{

for(j=0;jcol+2;j++)

{

printf("%d",maze[i][j]);

}

printf("\n");

}

}

void ShowMaze()//輸出迷宮

{

int i,j;

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

{

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

{

printf("%d",maze[i][j]);

}

printf("\n");

}

}

//釋放迷宮數組

void DestroyMaze()

{

int i;

for(i=0;irow+2;i++)

free(maze[i]);

free(maze);

}

//用DFS方法來實現回溯,找到迷宮的一條解路徑

int FindPath()

{

int i,j,k,count,x,y,direction;

count=0;

x=1,y=1;

direction=0;

j=0,k=0;

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

{

stack[i]=0;

}

i=0;

while(1)

{

count=0;/手衡/用count判斷是否有路可走

{

if(x==1y==1)

maze[x][y]=2;

if(maze[x][y+1]==0)//東

{

count++;

maze[x][y+1]=2;

y=y+1;

stack[i]=-1;

i++;

if(x==rowy==col)

return 1;

}

else if(maze[x+1][y]==0)//南

{

if(maze[x+1][y]==0)

count++;

{

maze[x+1][y]=2;

x=x+1;

stack[i]=-2;

i++;

if(x==rowy==col)

return 1;

}

}

else if(maze[x][y-1]==0)//西

{

count++;

if(maze[x][y-1]==0)

{

maze[x][y-1]=2;

y=y-1;

stack[i]=-3;

i++;

if(x==rowy==col)

return 1;

}

}

else if(maze[x-1][y]==0)//北

{

count++;

if(maze[x-1][y]==0)

{

maze[x-1][y]=2;

x=x-1;

stack[i]=-4;

i++;

if(x==rowy==col)

return 1;

}

}

}

if(count==0)

{

if(i0)

return 0;

direction=stack[i--];

switch(direction)

{

case -1:y=y-1;break;

case -2:x=x-1;break;

case -3:y=y+1;break;

case -4:x=x+1;break;

default:break;

}

}

}

}

int main()

{

CreateMaze();

if(FindPath())

{

printf("已經找到了一條路徑,如下:\n");

ShowMaze();

}

else

{

printf("沒有合適的路徑走出當前迷宮!\n");

}

DestroyMaze();

}

Java如何實現堆棧

//這是JDK提供的棧

import java.util.Stack;

public class UsingStack {

public static void main(String[] args) {

//構造棧對象,使用類型限制,只能存儲Integer數據

StackInteger s = new Stack襪衫Integer();

//1、2、3依次入棧

s.push(1);

s.push(2);

s.push(3);

//3、2、1依次出亮尺棧

System.out.println(s.pop());

System.out.println(s.pop());

System.out.println(s.pop());

}

}

//這是我寫的順序結構的棧

import java.util.EmptyStackException;

import java.util.Vector;

public class UsingStack{

public static void main(String[] args){

//構造棧對象,使用類型限告鍵腔制,只能存儲Integer數據

MyStackInteger s = new MyStackInteger();

//1、2、3依次入棧

s.push(1);

s.push(2);

s.push(3);

//3、2、1依次出棧

System.out.println(s.pop());

System.out.println(s.pop());

System.out.println(s.pop());

}

}

/**

* 棧類

* @author developer_05

* @param T

*/

class MyStackT extends VectorT{

/**

* 構造方法

*/

public MyStack(){

}

/**

* 入棧方法

* @param item 待入棧的元素

* @return 返回入棧的元素

*/

public T push(T item) {

addElement(item);

return item;

}

/**

* 出棧方法(同步處理)

* @return 返回出棧元素

*/

public synchronized T pop() {

T obj;

int len = size();

if (len == 0)

throw new EmptyStackException();

obj = elementAt(len - 1);

removeElementAt(len - 1);

return obj;

}

/**

* 判斷棧是否為空的方法

* @return 返回true(棧空)或false(棧非空)

*/

public boolean empty() {

return size() == 0;

}

private static final long serialVersionUID = 1L;

}

【迷宮問題】用堆棧解迷宮

#include?stdio.h

#include?time.h

#include?stdlib.h

#include?string.h

#define?MAXM?40??

#define?MAXN?60

int?maze[MAXM][MAXN];?//?0?1-障礙物

int?m?=?40,?n?=?60;?//?40行60列

int?used[MAXM][MAXN];?//?記錄是否到過

int?line[MAXM*MAXN];?//?記錄迷宮路線

int?line_len;

int?line_r[MAXM*MAXN];

int?d[4][2]?=?{?{?1,?0?},?{?0,?1?},?{?-1,?0?},?{?0,?-1}?};?//?4個方向

void?dfs(int?u,?int?v,?int?step)

{

int?x,?y,?i;

if?(line_len?!=?0)

return;

if?(u?==?m-1??v?==?n-1)

{

line_len?=?step;

memcpy(line_r,?line,?line_len*sizeof(int));

return;

}

for?(i?=?0;?i??4;?i++)

{

x?=?u?+?d[i][0];

y?=?v?+?d[i][1];

if?(x?=?0??x??m??y?=?0??y??n??!used[x][y]??maze[x][y]==0)

{

used[x][y]?=?1;

line[step]?=?x??16?|?y;

dfs(x,?y,?step+1);

含山????//?used[x][y]?=?0;?//?不用退回來了,因為只需要一條路徑

}

}

}

int?main()?

{

int?i,?j;

//?隨機生成迷宮

srand(time(NULL));

for?(i?=?0;?i??m;?i++)

for?(j?=?0;?j??n;?j++)

maze[i][j]?=?rand()%8?==?0???1?:?0;?//?是1的概率約1/8,通路的概率大些

maze[0][0]?=?maze[m-1][n-1]?=?0;?//?起始點和終端必須為0

line_len?=?0;

line[0]?=?0??16?|?0;

memset(used,?0,?sizeof(used));

dfs(0,?0,?0);?//?(0,0)?-?(m-1,?n-1)

if?(line_len?==?0)

printf("沒有通路\n");

else

{

for?(i?=?0;?i??line_len;?i++)

printf("(?%d,?%d?)\n",?(line_r[i]16)+1,?(line_r[i]0xffff)+1);

}

return?0;

}

你給的那庫實在是沒什枝老則么用的欲望,要最短路猛棚徑一般用廣度搜索,上面的代碼應該屬于深度搜索


網站欄目:JAVA迷宮代碼堆棧算法 java 走迷宮
本文網址:http://weahome.cn/article/ddpjsgd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部