java迷宫的代码 java迷宫代码解析

迷宫问题的求解源代码

typedef struct{

做网站、成都网站制作介绍好的网站是理念、设计和技术的结合。创新互联建站拥有的网站设计理念、多方位的设计风格、经验丰富的设计团队。提供PC端+手机端网站建设,用营销思维进行网站设计、采用先进技术开源代码、注重用户体验与SEO基础,将技术与创意整合到网站之中,以契合客户的方式做到创意性的视觉化效果。

int Col,Row;//迷宫的大小

int arr[Rangle][Rangle]; //0表示障碍,1表示是可走的通道,-1表示外界的围墙

}MazeType;

void InitMaze(MazeType

M,int col,int row)

{

//按照用户的输入的行数row和列数col列的二维数组(元素值为1或0)

//设置迷宫的初值,加上边缘的一圈的值

}

void PrintMaze(MazeType M)

{

//根据已经进行二维数组的标记值来输出迷宫(或者其通路)

}

bool Pass(MazeType M,PosType pos)

{//求解迷宫M中,从Start到end的一条路径

//若存在则返回true,否则返回false

Stack S;

InitStack(S);

PosType curpos=start;//设置当前坐标为入口位置;

int curstep=1;

//当前的步数

bool Find=false;

//是否找到出口

ElemType e;

do{

if(Pass(M,curpos))

{

FootPrint(M,curpos);//在当前位置标记为2

e.step=1;

e.seat=curpos;

e.di=1;//初始化为向右边位置移动

Push(S,e);

if(curpos.c==end.ccurpos.r==end.r)//如果找到了出口则终止,并返回true

{

Find=true;

return Find;

}

else{

curpos=NextPos(curpos,1);

curstep++;

}

}

else{//当前位置不能通过

if(!StackEmpty(S)){

Pop(S,e);//将已经走过的最近位置弹出,数据保存在e中

while(e.di==4!(StackEmpty(S))){

MarkPrint(M,e.seat);//留下不能通过的标记

Pop(S,e);

curstep--;

}//while

if(e.di4)//不能通过则改变方向

{

e.di++;//方向顺时针改变一下

Push(S,e);

curpos = NextPos(e.seat,e.di); //求下一个节点

}

}

}

}while(!StackEmpty(S)!Find);

//(!StackEmpty(S)!Find);//当栈不为空且没有找到出口

return

false;//没有找到出口则返回false

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

这个可以用 堆栈 来完成。

用堆栈的基本思路就是。

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

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

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

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

java迷宫路径总条数问题

int[][] data是你的迷宫数组,返回值是路径总条数,不需要递归

public int findWayCount(int[][] data) {

int[][] way = new int[data.length][];

for (int m = 0; m data.length; m++) {

way[m] = new int[data[m].length];

for (int n = 0; n data[m].length; n++) {

if (data[m][n] == 0) {

way[m][n] = 0;

} else if (m == 0 n == 0) {

way[m][n] = data[0][0];

} else if (m == 0) {

way[m][n] = way[m][n - 1];

} else if (n == 0) {

way[m][n] = way[m - 1][n];

} else {

way[m][n] = way[m][n - 1] + way[m - 1][n];

}

}

}

JAVA数据结构迷宫求解!

#includestdio.h

#includegraphics.h

#includeconio.h

typedef struct{

int x,y;

int dir;

}pos,elem;

typedef struct{

elem* b,* t;

int size;

}stack;

void initstack(stack* s)

{

s-b=(elem*)malloc(50*sizeof(elem));

if(s-b){

s-t=s-b;

s-size=50;

return;

}

exit(0);

}

void push(stack* s,elem* e)

{

*s-t=*e;

s-t++;

}

void pop(stack* s,elem* e)

{

*e=*--s-t;

}

void gettop(stack* s,elem* e)

{

*e=*(s-t-1);

}

void clearstack(stack* s)

{

s-t=s-b;

}

int stackempty(stack* s)

{

return !(s-t-s-b);

}

int destroystack(stack* s)

{

free(s-b);

free(s);

return 1;

}

int mg[10][10]={

{-1,-0,-1,-1,-1,-1,-1,-1,-1,-1},

{-1,-0,-0,-0,-1,-0,-0,-0,-0,-1},

{-1,-0,-1,-0,-1,-0,-1,-1,-0,-1},

{-1,-0,-1,-1,-0,-0,-0,-0,-0,-1},

{-1,-0,-0,-1,-0,-1,-1,-0,-0,-1},

{-1,-0,-0,-0,-0,-0,-1,-0,-0,-1},

{-1,-0,-1,-0,-0,-0,-0,-1,-0,-1},

{-1,-0,-1,-1,-0,-0,-0,-1,-0,-1},

{-1,-0,-0,-0,-1,-0,-0,-1,-0,-0},

{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}

};

void step(stack* s,pos* cur,stack* result);

void savepath(stack* s,pos* cur,stack* result);

void draw(int y,int x);

void step(stack* s,pos* cur,stack* result)

{

if(stackempty(result)||s-t-s-bresult-t-result-b){

for(cur-dir++;cur-dir5;cur-dir++){

setfillstyle(SOLID_FILL,15);

switch(cur-dir){

case 1:

if(!mg[cur-y-1][cur-x]){

mg[cur-y][cur-x]=1;

push(s,cur);

cur-y--;

cur-dir=0;

draw(cur-y,cur-x);

return;

}

break;

case 2:

if(!mg[cur-y][cur-x+1]){

mg[cur-y][cur-x]=1;

push(s,cur);

cur-x++;

cur-dir=0;

draw(cur-y,cur-x);

return;

}

break;

case 3:

if(!mg[cur-y+1][cur-x]){

mg[cur-y][cur-x]=1;

push(s,cur);

cur-y++;

cur-dir=0;

draw(cur-y,cur-x);

return;

}

break;

case 4:

if(!mg[cur-y][cur-x-1]){

mg[cur-y][cur-x]=1;

push(s,cur);

cur-x--;

cur-dir=0;

draw(cur-y,cur-x);

return;

}

break;

default:

exit(0);

}

}

}

mg[cur-y][cur-x]=0;

setfillstyle(SOLID_FILL,0);

draw(cur-y,cur-x);

pop(s,cur);

}

void savepath(stack* s,pos* cur,stack* result)

{

pos* top=s-t;

if(stackempty(result)){

push(result,cur);

while(tops-b)

push(result,--top);

}

else if(result-t-result-bs-t-s-b){

clearstack(result);

push(result,cur);

while(tops-b)

push(result,--top);

}

}

void draw(int y,int x)

{

bar(100+15*x,100+15*y,115+15*x,115+15*y);

}

void main(void)

{

int i;

int x,y;

int gd=DETECT,gm;

stack* s=NULL;

stack* result=NULL;

pos* cur=NULL;

initgraph(gd,gm,"");

for(x=0;x10;x++)

for(y=0;y10;y++){

if(mg[y][x]){

setfillstyle(SOLID_FILL,3);

draw(y,x);

}

}

result=(stack*)malloc(sizeof(stack));

initstack(result);

s=(stack*)malloc(sizeof(stack));

cur=(pos*)malloc(sizeof(pos));

initstack(s);

cur-x=1;

cur-y=0;

cur-dir=0;

push(s,cur);

cur-x=1;

cur-y=1;

cur-dir=1;

do{

if(cur-x==9cur-y==8)

savepath(s,cur,result);

step(s,cur,result);

}while(!stackempty(s));

if(stackempty(result))

printf("no way available");

else{

int ch=0;

printf("following is the shortest path:\n");

while(!stackempty(result)){

pop(result,cur);

setfillstyle(SOLID_FILL,15);

draw(cur-y,cur-x);

if(ch5){

putchar('\n');

ch=0;

}

printf("(%d,%d,%d) ",cur-x,cur-y,cur-dir);

ch++;

}

}

printf("\n");

destroystack(s);

destroystack(result);

free(cur);

printf("Press any key to end");

while(!kbhit());

closegraph();

}

java迷宫图形界面

这是我之前课程设计做的一个迷宫,Swing做的,发在javaeye的博客上了,有打包成jar的,安装了jdk可以直接双击运行,有源码,还有我写的一个说明文档,网址如下:

自己下载下吧,我就不给你发到邮箱了。


网页名称:java迷宫的代码 java迷宫代码解析
文章来源:http://ybzwz.com/article/hhphje.html