社区
C++ 语言
帖子详情
求解 迷宫问题
raindream
2003-08-19 05:32:49
那位大侠能帮忙写一个求迷宫问题的程序,要求用c++完成,急需!!! 谢谢!!
...全文
56
6
打赏
收藏
求解 迷宫问题
那位大侠能帮忙写一个求迷宫问题的程序,要求用c++完成,急需!!! 谢谢!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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;
}
不好意思,很乱
用邻接表
求解
迷宫问题
数据结构中用邻接表
求解
迷宫问题
,该算法运用了简单的原理,但是非常实用的解决了
迷宫问题
队列
求解
迷宫问题
ACM、数据结构练习经典问题——队列
求解
迷宫问题
。VC6.0调试通过。
matlab常微分方程
求解
matlab常微分方程
求解
,通过编程实战掌握具体应用。包括matlab常微分方程
求解
前、matlab常微分方程
求解
中、matlab常微分方程
求解
后。
数据结构课程设计--
求解
迷宫问题
数据结构课程设计--
求解
迷宫问题
AStar算法
求解
迷宫问题
根据最优路径算法Astar算法编写的C++
求解
迷宫问题
C++ 语言
64,282
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章