求解 迷宫问题

raindream 2003-08-19 05:32:49
那位大侠能帮忙写一个求迷宫问题的程序,要求用c++完成,急需!!! 谢谢!!
...全文
56 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
raindream 2003-08-26
  • 打赏
  • 举报
回复
谢谢
谢谢 了
小弟非常感谢各位大哥的热心帮助

谢谢了!!!!
kwokw 2003-08-20
  • 打赏
  • 举报
回复
象这样输入:
6,6
0 1 1 1 0 1
1 0 1 1 1 1
0 0 1 0 1 1
0 0 0 1 1 1
1 1 0 0 1 1
1 1 1 0 0 0
1,1
6,6
kwokw 2003-08-20
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<malloc.h>
#define STACK_INIT_SIZE 50
#define STACKINCREMENT 10
typedef struct{
int x;
int y;
int di;
}SElemType;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}sqstack;
void NextPos(int &x,int &y,int next){
switch(next){
case 1:(y)++; break;
case 2:(x)++,(y)++;break;
case 3:(x)++; break;
case 4:(x)++,(y)--;break;
case 5:(y)--; break;
case 6:(x)--,(y)--;break;
case 7:(x)--; break;
case 8:(x)--,(y)++;break;
default:printf("error\n");
}
}
void Push(sqstack &s,SElemType en){
if(s.top-s.base>=s.stacksize){
s.base=(SElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!s.base)printf("overflow");
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=en;
}
void main()
{ int a[40][40];
int i,j,m,n,x1,y1,x2,y2;
for(i=0;i<40;i++)
for(j=0;j<40;j++)
a[i][j]=1;
printf("请输入迷宫的行数和列数:\n");
again: scanf("%d,%d",&m,&n);
if(m>=40||n>=40){
printf("\nm and n shoud be small than 40,please input again");
goto again;
}
printf("请输入迷宫:\n");
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
printf("请输入迷宫的入口: ");
scanf("%d,%d",&x1,&y1);
printf("请输入迷宫的出口: ");
scanf("%d,%d",&x2,&y2);
sqstack s;
s.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)printf("\nthere is no memery at all");
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
int xn=x1,yn=y1;
SElemType e;
do{
if(a[xn][yn]==0){
a[xn][yn]=2;
e.x=xn;
e.y=yn;
e.di=1;
Push(s,e);
if(xn==x2&&yn==y2)goto END;
NextPos(xn,yn,1);
}
else{
if(s.top!=s.base){
e=*--s.top;
while(e.di==8&&s.top!=s.base){
a[e.x][e.y]=2;
s.top--;
e=*s.top;
}
if(e.di<8){
e.di++;
Push(s,e);
xn=e.x;yn=e.y;
NextPos(xn,yn,e.di);
}
}
}
}while(s.top!=s.base);
END:printf("走出迷宫的路径为:\n");
for(;s.base!=s.top;s.base++)
a[(*s.base).x][(*s.base).y]=9;
for(i=1;i<=6;i++)
{
for(j=1;j<=6;j++)
{
if(a[i][j]==9)printf("# ");
else printf(" ");
}
printf("\n");
}
printf("\n请按任意键退出!\n");
scanf("%d",&i);
}
使用了部分c++ 的语法
可以通过,要注意输入的格式
raindream 2003-08-19
  • 打赏
  • 举报
回复
不行呀 大侠,这个小弟看不懂,小弟刚学,没有主函数,没法运行呀 ,那位大侠再帮帮忙吧,明天要交的,今天编了一天没有结果,急需!!!!!
chenkuizhong 2003-08-19
  • 打赏
  • 举报
回复
typedef struct game
{
int gi;
int gj;
struct game *prepoint;
struct game *nextpoint;
}mygame,*pmygame;

struct game *mypoint;


void CMyView::Search()
{
struct game *p;
struct game *head;

CClientDC dc(this);
bool flag=0;
int i=0;
int j=0;
int all=0;
mypoint=(pmygame)malloc(sizeof(mygame));




//初始化链表
for(j=0;j<8;j++)
{
if(gameboard[i][j]==2)
{

mypoint->gi=i;
mypoint->gj=j;
mypoint->nextpoint=NULL;
mypoint->prepoint=NULL;
flagboard[i][j]=1;

}
}


head=mypoint;



i=mypoint->gi;
j=mypoint->gj;


while((flag!=1)&&(i<=7)&&(i>=0)&&(j<=7)&&(j>=0))
{
if((gameboard[i+1][j]!=1)&&(flagboard[i+1][j]==0)&&((i+1)<=7))
{
p=(pmygame)malloc(sizeof(mygame));
p->gi=i+1;
p->gj=j;
p->nextpoint=NULL;
p->prepoint=mypoint;
mypoint->nextpoint=p;
mypoint=p;
flagboard[i+1][j]=1;
all++;

}
else if((gameboard[i][j+1]!=1)&&(flagboard[i][j+1]==0)&&((j+1)<=7))
{
p=(pmygame)malloc(sizeof(mygame));
p->gi=i;
p->gj=j+1;
p->nextpoint=NULL;
p->prepoint=mypoint;
mypoint->nextpoint=p;
mypoint=p;
flagboard[i][j+1]=1;
all++;

}
else if((gameboard[i][j-1]!=1)&&(flagboard[i][j-1]==0)&&((j-1)>=0))
{
p=(pmygame)malloc(sizeof(mygame));
p->gi=i;
p->gj=j-1;
p->nextpoint=NULL;
p->prepoint=mypoint;
mypoint->nextpoint=p;
mypoint=p;
flagboard[i][j-1]=1;
all++;

}
else
{
mypoint=mypoint->prepoint;
all++;

}

i=mypoint->gi;
j=mypoint->gj;


if(gameboard[i][j]==3)
{
flag=1;
dc.TextOut(50,50,"找到出口了");

}

if((mypoint->prepoint==NULL)||(all==200))
{
flag=1;
dc.TextOut(50,50,"这个迷宫没有出路!");
}




}

mypoint=head;


}


不好意思,很乱


chenkuizhong 2003-08-19
  • 打赏
  • 举报
回复
typedef struct game
{
int gi;
int gj;
struct game *prepoint;
struct game *nextpoint;
}mygame,*pmygame;

struct game *mypoint;

void CMyView::Search()
{
struct game *p;
struct game *head;

CClientDC dc(this);
bool flag=0;
int i=0;
int j=0;
int all=0;
mypoint=(pmygame)malloc(sizeof(mygame));




//初始化链表
for(j=0;j<8;j++)
{
if(gameboard[i][j]==2)
{

mypoint->gi=i;
mypoint->gj=j;
mypoint->nextpoint=NULL;
mypoint->prepoint=NULL;
flagboard[i][j]=1;

}
}


head=mypoint;



i=mypoint->gi;
j=mypoint->gj;


while((flag!=1)&&(i<=7)&&(i>=0)&&(j<=7)&&(j>=0))
{
if((gameboard[i+1][j]!=1)&&(flagboard[i+1][j]==0)&&((i+1)<=7))
{
p=(pmygame)malloc(sizeof(mygame));
p->gi=i+1;
p->gj=j;
p->nextpoint=NULL;
p->prepoint=mypoint;
mypoint->nextpoint=p;
mypoint=p;
flagboard[i+1][j]=1;
all++;

}
else if((gameboard[i][j+1]!=1)&&(flagboard[i][j+1]==0)&&((j+1)<=7))
{
p=(pmygame)malloc(sizeof(mygame));
p->gi=i;
p->gj=j+1;
p->nextpoint=NULL;
p->prepoint=mypoint;
mypoint->nextpoint=p;
mypoint=p;
flagboard[i][j+1]=1;
all++;

}
else if((gameboard[i][j-1]!=1)&&(flagboard[i][j-1]==0)&&((j-1)>=0))
{
p=(pmygame)malloc(sizeof(mygame));
p->gi=i;
p->gj=j-1;
p->nextpoint=NULL;
p->prepoint=mypoint;
mypoint->nextpoint=p;
mypoint=p;
flagboard[i][j-1]=1;
all++;

}
else
{
mypoint=mypoint->prepoint;
all++;

}

i=mypoint->gi;
j=mypoint->gj;


if(gameboard[i][j]==3)
{
flag=1;
dc.TextOut(50,50,"找到出口了");

}

if((mypoint->prepoint==NULL)||(all==200))
{
flag=1;
dc.TextOut(50,50,"这个迷宫没有出路!");
}




}

mypoint=head;


}



不好意思,很乱

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧