189 8069 5689

迷宫问题vb.net 迷宫问题c语言完整代码

迷宫问题

#includestdio.h

成都创新互联主要从事成都网站建设、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务聂荣,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

#includeconio.h

int migong[10][10]= //设置迷宫,最外围1为墙 里边0为可走路径 1为障碍

{

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

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

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

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

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

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

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

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

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

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

};

int num;

struct

{

int x,y,d;

}lj[100];//x,y分别为垂直和水平方向

void start()

{

int top=0,x,y,d,find;//d为设置方向,上下左右。find为设置找不找得到路

lj[top].x=1;

lj[top].y=1;

migong[1][1]=-1;

find=0;d=-1;

while(top-1){

if(lj[top].x==8lj[top].y==8)

{

printf("迷宫路径如下:\n");

printf("start-");

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

{

printf("(%d,%d)- ",lj[x].x,lj[x].y);//把找到的路径输出

num++;

if(num%8==0)

printf("\n");

}

printf("-end!\n");

}

while(d4find==0){

d++;

switch(d){

case 0:x=lj[top].x-1; y=lj[top].y; break;//方向为上

case 1:x=lj[top].x; y=lj[top].y+1;break;//方向为右

case 2:x=lj[top].x+1; y=lj[top].y; break;//方向为下

case 3:x=lj[top].x; y=lj[top].y-1;}//方向为左

if(migong[x][y]==0)

find=1;

}

if(find==1){ //判断是否找得到

lj[top].d=d;

top++;

lj[top].x=x;

lj[top].y=y;

d=-1;find=0; //重新调整方向

migong[x][y]=-1;}

else{

migong[lj[top].x][lj[top].y]=0;

top--;d=lj[top].d; //找不到的话退栈

}

}

}

void main()

{

start();

getch();

}

迷宫问题 (**)

自己适当改一下下列程序迷宫的大小即可

#include stdio.h

#include stdlib.h

#define MAXMATRIXSIZE 12

#define MAXSTACKSIZE 12

#define EXITROW 10

#define EXITCOL 10

int Maze[MAXMATRIXSIZE][MAXMATRIXSIZE];

int FALSE=0;

int TRUE=1;

typedef struct 

{

short int Vert,Horiz;

} Offsets;

Offsets Move[8]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};

typedef struct

{

short int Row,Col,Dir;

} ElementType;

typedef struct 

{

ElementType Data[MAXSTACKSIZE];

int Top; 

} Stack;

void Push( Stack *PtrS, ElementType item )

{

if ( PtrS-Top == MAXSTACKSIZE-1 ) {

printf("堆栈满");

return;

}

else {

PtrS-Data[++(PtrS-Top)] = item;

return;

}

}

ElementType Pop( Stack *PtrS )

{    

ElementType ERROR;

ERROR.Col =-1;ERROR.Row =-1;ERROR.Dir =-1;

if ( PtrS-Top == -1 ) {

printf("堆栈空");

return ERROR ; /* ERROR是ElementType的特殊值,标志错误 */

}

else 

return ( PtrS-Data[(PtrS-Top)--] );

}

void Path( )

int i, Row, Col, NextRow, NextCol, Dir, Found = FALSE;

int Mark[MAXMATRIXSIZE][MAXMATRIXSIZE]; /* 标记位置是否走过 */

ElementType Position;

Stack S;

S.Top = -1;  /* 堆栈初始化为空 */

Mark[1][1] = 1;      /* 从入口位置开始,标记为走过 */

/* 将入口位置及下一个方向放入堆栈 */

S.Top++;

S.Data[S.Top].Row = 1;

S.Data[S.Top].Col = 1;

S.Data[S.Top].Dir = 2; 

/* 注意:不可能从入口向北走,所以方向序号从2开始,即从向东开始 */

while ( S.Top  -1  !Found ) { /* 当栈非空且没找到出口时 */

Position = Pop(S); /* 取出栈顶元素为当前位置 */

Row = Position.Row; Col = Position.Col; Dir = Position.Dir;

while ( Dir  8  !Found ) {/* 当还有方向可探且没找到出口时 */

/*尝试往下一个方向Dir移动 */

NextRow = Row + Move[Dir].Vert;

NextCol = Col + Move[Dir].Horiz;

if ( NextRow == EXITROW  NextCol == EXITCOL )  

/* 如果到出口 */

Found = TRUE;

else  /* 下一个位置不是出口 */

if ( !Maze[NextRow][NextCol]  !Mark[NextRow][NextCol] ){

/* 若下一个位置可通,且没走过 */

Mark[NextRow][NextCol] = 1; /* 标记为走过 */

Position.Row = Row;

Position.Col = Col;

Position.Dir = Dir + 1;

Push(S, Position);  /* 当前位置和下一个方向存入栈 */

/* 更新当前位置,从方向0开始 */

Row = NextRow; Col = NextCol; Dir = 0;

} /* 结束if */

else ++Dir; /* 若此路不通,则在当前位置尝试下一个方向 */

} /* 结束8方向探测 */

} /* 结束搜索 */

if ( Found ) {    /* 找到一个路径,并输出该路径 */

printf ("The path is:\n");

printf ("row  col\n");

for ( i = 0; i = S.Top; i++ )

printf ("%d %d\n", S.Data[i].Row, S.Data[i].Col);

printf ("%d %d\n", Row, Col); /* 不要忘记最后一步未入堆栈 */

printf ("%d %d\n", EXITROW, EXITCOL); /* 打印出口 */

}

else /* 若没找到路径 */

printf ("The maze does not have a path\n");

}

void main()

{

int i,j;

FILE *fp;

if((fp=fopen("迷宫矩阵.txt","r"))==NULL) {printf("文件不存在!");exit;}

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

{printf("\n"); 

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

{fscanf(fp,"%d",Maze[i][j]);

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

}

fclose(fp);

Path();

}

迷宫问题的求解源代码

typedef struct{

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

VB6.0制作迷宫程序

首先根据自己的需要和喜好,去素材网站下载ico图标,当然这些图标VB6.0不一定能够直接用。

开始--打开ArtIcons Pro软件。

打开的ArtIcons Pro软件界面如图所示:

“文件”--“打开”,弹出打开对话框,选择所需修改的图标,单击“打开”按钮打开图标,在软件中显示出来。

在软件右侧,单击鼠标右键,选择“新图像”命令。

在打开的“新图像格式对话框”中按照VB6.0所需的ico图标格式进行设置:

大小选择48X48,颜色选择256色,其它默认,单击“确定按钮进行确认。”

此时按照刚刚制定的格式,生成了一个新图像:

"文件"--“导出”--“当前图像”,命名后保存。生成一个新图标如图所示:

随便打开一个VB6.0工程,将刚刚生成的图标加入到Form1的ico属性中:

在“文件”菜单下选择生成exe命令,在弹出的生成工程对话框中按确定按钮,生成了一个心形图标,非常美观。想要生成自己喜欢的图标都可以参照以上方法。


文章名称:迷宫问题vb.net 迷宫问题c语言完整代码
分享链接:http://cdxtjz.cn/article/hjgpsh.html

其他资讯