• 全部
  • 问答

一个求迷宫算法的结构,谁能帮我指点以下哪儿错了,实在是找不出来了

追忆 IT工程师  2008-03-21 05:52:38
#include<iostream.h>
#include<stdlib.h>

#define STACK_SIZE 100
#define SIZE 10
int i=0,j=0;
typedef struct{
int ch;
int ord;
int a[2];
int di;
}selemtype;
typedef struct{
selemtype *base;
selemtype *top;
int stacksize;
}sqstack;
void initstack(sqstack *s)
{
s->base=(selemtype*)malloc(STACK_SIZE*sizeof(selemtype));
if(!s->base)
{
cout<<"overflow"<<endl;
exit(1);
}
s->top=s->base;
s->stacksize=STACK_SIZE;
}
void push(sqstack *s,selemtype *e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(selemtype*)realloc(s->base,(s->stacksize+STACK_SIZE)*sizeof(selemtype));
if(!s->base)
{
cout<<"overflow"<<endl;
exit(1);
}
s->top=s->base+s->stacksize;
s->stacksize+=STACK_SIZE;
}
*s->top++=*e;
}
void pop(sqstack s,selemtype &se)
{

if(s.top==s.base)
{
cout<<"error"<<endl;
return ;
}
se=*--s.top;
return ;
}

int pass(selemtype *d)
{
if(d->ch!=0&&d->ord==0)
return 1;
else
return 0;
}

//int footprint(char &ch)
//{



void destroystack(sqstack *s)
{
for(;s->top!=s->base;--s->top)
free(s->top-1);
}
void nextpos(selemtype *d,int a,selemtype &E1)
{
switch(a)
{
case '1':
*d==E1[i][j+1];

break;
case '2':
*d=E1[i+1][j];
break;
case '3':
*d=E1[i][j-1];
break;
case '4':
*d=E1[i-1][j];
break;
default :
break;
}
return ;
}
int stackempty(sqstack *s)
{
if(s->base==s->top)
return 0;
else
return 1;
}
void main()
{
char cha[10][10]={{0,0,0,0,0,0,0,0,0,0},{0,2,1,0,1,1,1,0,1,0},
{0,1,1,0,1,1,1,0,1,0},{0,1,1,1,1,0,0,1,1,0},{0,1,0,0,0,1,1,1,1,0},
{0,1,1,1,0,1,1,1,1,0},{0,1,0,1,1,1,0,1,1,0},{0,1,0,0,0,1,0,0,1,0},
{0,0,1,1,1,1,1,1,3,0},{0,0,0,0,0,0,0,0,0,0}};
cout<<"out put the migong:"<<endl;
for(int m=0;m!=10;++m)
{
for(int n=0;n!=10;++n)
{
cout<<cha[m][n]<<' ';
}
cout<<endl;
}
selemtype E[10][10];
for(;i!=10;++i)
{
for(;j!=10;++j)
{
E[i][j].ord=0;
E[i][j].ch=cha[i][j];
E[i][j].a[0]=i;
E[i][j].a[1]=j;
E[i][j].di=1;
}
}


sqstack s;
selemtype e;
//int curtep=1;
//char cupos;
initstack(&s);
i=0;
j=0;
//cupos=start;
e=E[i][j];
do{
if(pass(&e))
{

push(&s,&e);
if(e.ch==3)
{
cout<<"true"<<endl;

}
nextpos(&e,1,E);
}
else
{
if(!stackempty(&s))
{
pop(&s,&e);
while(e.di==4&&!stackempty(&s))
{
//markprint(e.seat);
pop(&s,&e);
}
if(e.di<4)
{
e.di++;
push(&s,&e);
nextpos(&e,e.di);
}
}
}
}while(!stackempty(&s));
cout<<"false"<<endl;
while(s.top!=s.base)
{

pop(&s,&e);
for(int m=0;m!=2;++m)
{
cout<<e.a[m]<<' ';
}
cout<<endl;
}
destroystack(&s);
}
...全文
75 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
meiZiNick 2008-05-01
我也想知道,正在找這方面的資料~~~~~
回复
等待牛人来答.
回复
UltraBejing 2008-04-30
有问题请先GOOGLE,BAIDU
回复
追忆 2008-03-24
怎么输出的迷宫不对
回复
追忆 2008-03-22
我就是不懂哪错了
回复
追忆 2008-03-22
能具体解释一下吗
回复
lzy340623339 2008-03-22
#define STACK_SIZE 100 
#define SIZE 10
int i=0,j=0;
typedef struct{
int ch;
int ord;
int a[2];
int di;
}selemtype;
typedef struct{
selemtype *base;
selemtype *top;
int stacksize;
}sqstack;
void initstack(sqstack *s)
{
s->base=(selemtype*)malloc(STACK_SIZE*sizeof(selemtype));
if(!s->base)
{
cout <<"overflow" <<endl;
exit(1);
}
s->top=s->base;
s->stacksize=STACK_SIZE;
}
void push(sqstack *s,selemtype *e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(selemtype*)realloc(s->base,(s->stacksize+STACK_SIZE)*sizeof(selemtype));
if(!s->base)
{
cout <<"overflow" <<endl;
exit(1);
}
s->top=s->base+s->stacksize;
s->stacksize+=STACK_SIZE;
}
*s->top++=*e;
}
void pop(sqstack &s,selemtype &se)
{

if(s.top==s.base)
{
cout <<"error" <<endl;
return ;
}
se=*--s.top;
return ;
}

int pass(selemtype *d)
{
if(d->ch!=0&&d->ord==0)
return 1;
else
return 0;
}

//int footprint(char &ch)
//{



void destroystack(sqstack *s)
{
for(;s->top!=s->base;--s->top)
free(s->top-1);
}
void nextpos(selemtype *d,int a,selemtype E1[][10])
{
switch(a)
{
case '1':
*d=E1[i][j+1];

break;
case '2':
*d=E1[i+1][j];
break;
case '3':
*d=E1[i][j-1];
break;
case '4':
*d=E1[i-1][j];
break;
default :
break;
}
return ;
}
int stackempty(sqstack *s)
{
if(s->base==s->top)
return 0;
else
return 1;
}
void main()
{
char cha[10][10]={{0,0,0,0,0,0,0,0,0,0},{0,2,1,0,1,1,1,0,1,0},
{0,1,1,0,1,1,1,0,1,0},{0,1,1,1,1,0,0,1,1,0},{0,1,0,0,0,1,1,1,1,0},
{0,1,1,1,0,1,1,1,1,0},{0,1,0,1,1,1,0,1,1,0},{0,1,0,0,0,1,0,0,1,0},
{0,0,1,1,1,1,1,1,3,0},{0,0,0,0,0,0,0,0,0,0}};
cout <<"out put the migong:" <<endl;
for(int m=0;m!=10;++m)
{
for(int n=0;n!=10;++n)
{
cout <<cha[m][n] <<' ';
}
cout <<endl;
}
selemtype E[10][10];
for(;i!=10;++i)
{
for(;j!=10;++j)
{
E[i][j].ord=0;
E[i][j].ch=cha[i][j];
E[i][j].a[0]=i;
E[i][j].a[1]=j;
E[i][j].di=1;
}
}


sqstack s;
selemtype e;
//int curtep=1;
//char cupos;
initstack(&s);
i=0;
j=0;
//cupos=start;
e=E[i][j];
do{
if(pass(&e))
{

push(&s,&e);
if(e.ch==3)
{
cout <<"true" <<endl;

}
nextpos(&e,1,E);
}
else
{
if(!stackempty(&s))
{
pop(s,e);
while(e.di==4&&!stackempty(&s))
{
//markprint(e.seat);
pop(s,e);
}
if(e.di <4)
{
e.di++;
push(&s,&e);
nextpos(&e,e.di,E);
}
}
}
}while(!stackempty(&s));
cout <<"false" <<endl;
while(s.top!=s.base)
{

pop(s,e);
for(int m=0;m!=2;++m)
{
cout <<e.a[m] <<' ';
}
cout <<endl;
}
destroystack(&s);
}
回复
kgn28 2008-03-21
把程序提出来应该不会有什么人来给你一条一条分析吧!
我建议你用vc好好调试一下,捋顺一下思路,不要急。
回复
相关推荐
综教楼后的那个坑用双向链表实现 描述   在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。   从横截面图来看,坑底成阶梯状,由从左至右的 1..N 个的平面构成(其中 1 ≤ N ≤ 100,000),如图:    *            * :    *            * :    *            * 8    *    **      * 7    *    **      * 6    *    **      * 5    *    ********* 4 <- 高度    *    ********* 3    ************** 2    ************** 1 平面 |  1  |2|   3    | 每个平面 i 可以用两个数字来描述,即它的宽度 Wi 和高度 Hi,其中 1 ≤ Wi ≤ 1,000、1 ≤ Hi ≤ 1,000,000,而这个坑最特别的地方在于坑底每个平面的高度都是不同的。每到夏天,雨水会把坑填满,而在其它的季节,则需要通过人工灌水的方式把坑填满。灌水点设在坑底位置最低的那个平面,每分钟灌水量为一个单位(即高度和宽度均为 1)。随着水位的增长,水自然会向其它平面扩散,当水将某平面覆盖且水高达到一个单位时,就认为该平面被水覆盖了。   请你计算每个平面被水覆盖的时间。    灌水 水满后自动扩散 | | * | * * | * * * * V * * V * * * * * * .... * *~~~~~~~~~~~~* * ** * *~~~~** : * *~~~~**~~~~~~* * ** * *~~~~** : * *~~~~**~~~~~~* * ** * *~~~~**~~~~~~* *~~~~**~~~~~~* * ********* *~~~~********* *~~~~********* *~~~~********* *~~~~********* *~~~~********* ************** ************** ************** ************** ************** **************    4 分钟后    26 分钟后        50 分钟后    平面 1 被水覆盖     平面 3 被水覆盖    平面 2 被水覆盖输入   输入的第一行是一个整数 N,表示平面的数量。从第二行开始的 N 行上分别有两个整数,分别表示平面的宽度和高度。 输出   输出每个平面被水覆盖的时间。
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-21 05:52
社区公告
暂无公告