迷宫问题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://ybzwz.com/article/hjgpsh.html