| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1887 人关注过本帖
标题:迷宫问题的源程序
只看楼主 加入收藏
ibiancheng
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2007-4-3
收藏
 问题点数:0 回复次数:5 
迷宫问题的源程序

各位,谁有迷宫的源程序呀,本人是用的是VC6.0的编译器,希望是那种能够运行没有错误的!


本人不是为了交什么作业才要的,而是前些时候自己看过书之后自己尝试着写程序,可每次都错误百出,没有信心,而且也找不到能够帮忙解决的人,所以觉得可能还是读懂别人写好的程序是个捷径,不知道我这想法对不!

搜索更多相关主题的帖子: 源程序 迷宫 捷径 作业 信心 
2007-10-25 20:18
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

Fight  to win  or  die...
2007-10-25 21:04
企鹅
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-7-14
收藏
得分:0 

/* map
1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 1 0 1
1 0 0 1 0 0 0 1 0 1
1 0 0 0 0 1 1 0 0 1
1 0 1 1 1 0 0 0 0 1
1 0 0 0 1 0 0 0 0 1
1 0 1 0 0 0 1 0 0 1
1 0 1 1 1 0 1 1 0 1
1 1 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
*/
#include <iostream>
#include <malloc.h>
#include <cstdlib>
using namespace std;

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

int Maze[10][10];

typedef struct{
int x;
int y;
} PosType;

typedef struct{
int ord;
PosType seat;
int di;
} SElemType;

typedef int Status;

typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
} SqStack;

Status InitStack(SqStack &s); //构造一个空栈
Status DestroyStack(SqStack &s); //销毁栈
Status ClearStack(SqStack &s);//清空栈
Status StackEmpty(SqStack s); //判断栈是否为空
int StackLength(SqStack S);//求栈长
Status GetTop(SqStack s,SElemType &e);//取得栈顶元素
Status Push(SqStack &s,SElemType &e);//入栈
Status Pop(SqStack &s,SElemType &e); //出栈
Status Pass(PosType s); //判断可过
PosType NextPos(PosType,int); //下个方位
void FootPrint(PosType); //留下足迹
void MarkPrint(PosType); //标记不可到达

int main()
{

SqStack L;
InitStack(L);
int curstep;
char c='#';
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
cin>>Maze[i][j];
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
if(Maze[i][j]==1)
cout<<c;
else cout<<" ";
cout<<endl;
}
int z;
SElemType e,*k;
PosType start,end,curpos;//起点 终点 当前位置
start.x=1;
start.y=1;
end.x=1;
end.y=8;
curpos=start;
curstep=1;
do{
/*for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
if(Maze[i][j]==1)
cout<<c;
else cout<<" ";
cout<<endl;
}
cin>>z;*/
if(Pass(curpos)) //如果当前位置可达
{
e.ord=curstep;
e.seat=curpos;
e.di=1;
FootPrint(curpos);
Push(L,e);
if(curpos.x==end.x&&curpos.y==end.y)
break;
curpos=NextPos(curpos,1);
curstep++;
}
else //如果当前位置不可达
{
if(!StackEmpty(L))
{
Pop(L,e);
while(e.di==4&&!StackEmpty(L))
{
MarkPrint(e.seat);
Pop(L,e);
}
if(e.di<4)
{
e.di++;
Push(L,e);
curpos=NextPos(e.seat,e.di);
}
}
}
}
while(!StackEmpty(L));
if(!StackEmpty(L))
{
for(k=L.base;k!=L.top;k++)
cout<<k->seat.x<<","<<k->seat.y<<" ";
cout<<endl;
}
else cout<<"I can't reach there."<<endl;
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(Maze[i][j]==1)
cout<<c;
else if(Maze[i][j]==2)
cout<<"!";
else if(Maze[i][j]==3)
cout<<"$";
else cout<<" ";
}
cout<<endl;
}
return 0;
}

Status Pass(PosType s)
{
if(Maze[s.x][s.y]==0)
return TRUE;
else return FALSE;
}

PosType NextPos(PosType s,int b)
{
PosType e;
switch(b){
case 1:e.x=s.x;e.y=s.y+1;break;
case 2:e.x=s.x+1;e.y=s.y;break;
case 3:e.x=s.x;e.y=s.y-1;break;
case 4:e.x=s.x-1;e.y=s.y;break;
}
return e;
}

void FootPrint(PosType t)
{
Maze[t.x][t.y]=3;
}

void MarkPrint(PosType t)
{
Maze[t.x][t.y]=2;
}


Status InitStack(SqStack &s)
{
s.base=(SElemType *)malloc(sizeof(SElemType)*STACK_INIT_SIZE);
if(!s.base)
exit(OVERFLOW);
s.stacksize=STACK_INIT_SIZE;
s.top=s.base;
return OK;
}

Status DestroyStack(SqStack &s)
{
if(!s.base)
return ERROR;
free(s.base);
SqStack *p=&s;
free(p);
return OK;
}

Status ClearStack(SqStack &s)
{
if(!s.base)
return ERROR;
s.top=s.base;
return OK;
}

Status StackEmpty(SqStack s)
{
if(!s.base)
return ERROR;
if(s.base==s.top)
return TRUE;
else return FALSE;
}

int StackLength(SqStack s)
{
return s.top-s.base;
}

Status GetTop(SqStack s,SElemType &e)
{
if(StackEmpty(s))
return ERROR;
e=*--s.top;
return OK;
}

Status Push(SqStack &s,SElemType &e)
{
if(!s.base)
return ERROR;
if(StackLength(s)==s.stacksize)
{
s.base=(SElemType *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!s.base)
exit(OVERFLOW);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
return OK;
}

Status Pop(SqStack &s,SElemType &e)
{
if(StackEmpty(s))
return ERROR;
e=*--s.top;
return OK;
}

2007-10-25 22:22
ibiancheng
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2007-4-3
收藏
得分:0 

谢谢了


执著的信念,坚定的自信,勤奋的努力才是通向成功的捷径! !!
2007-10-26 19:09
mimi0201
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-9-15
收藏
得分:0 

谢谢了

2007-10-27 19:37
ddznq008
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2010-12-21
收藏
得分:0 
2010-12-21 23:52
快速回复:迷宫问题的源程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033957 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved