Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
哪里需要用stack啊 算法就有问题In Reply To:哪位大哥帮下忙看看?多谢!!!!!!!!! Posted by:onon at 2006-08-05 01:41:43 > #include<iostream.h> > #include<ctype.h> > #include<stdio.h> > #include<stdlib.h> > > const int MaxSize=1000; > > typedef struct{ > int x; > int y; > }PosType; > > typedef struct{ > int di; > PosType pos; > }SElemType; > > typedef struct{ > SElemType *base, *top; > int CurSize; > int StackSize; > }Stack, SType; > > void InitStack(SType*s) > { > s->base=(SElemType*)malloc(sizeof(SElemType)*MaxSize); > if(s->base==NULL) cout<<"memery allocation failure"<<endl; > s->StackSize=MaxSize; > s->CurSize=0; > s->top=s->base; > > } > > void Push(SElemType e, SType *s) > { > if(s->CurSize==MaxSize) > { > cout<<"the stack is full"<<endl; > return; > } > else{ > *s->top++=e; > s->CurSize++; > > } > } > > void Pop(SElemType&e, SType *s) > { > if(s->base==s->top) > { > cout<<"the stack is empty"<<endl; > return; > } > else e=*--s->top; > } > > int StackEmpty(SType s) > { > if(s.base==s.top) return 1; > else return 0; > } > > PosType NextPos(PosType pt, int d) > { > switch(d){ > case 1: pt.x+=1; break; > case 2: pt.y+=1; break; > case 3: pt.x-=1; break; > case 4: pt.y-=1; break; > default: cout<<"wrong direction"<<endl; > } > return pt; > } > > void print(char m[][25], int r, int c) > { > for(int i=0; i<r; i++){ > for(int j=0; j<c; j++) > cout<<m[i][j]<<' '; > cout<<endl; > } > } > > > > int main() > { > int step, i, j, w, h; > char maze[25][25], c; > PosType start, CurPos; > SType s; > SElemType e; > > > > > while(1) > { > cin>>w>>h; > if(w==0&&h==0) break; > InitStack(&s); > > for(i=1; i<=h; i++) > for(j=1; j<=w; j++){ > cin>>maze[i][j]; > if(maze[i][j]=='@'){ > start.x=i; start.y=j; > } > } > for(i=0; i<=w+1; i++){ maze[0][i]='#';maze[h+1][i]='#';} > for(i=0; i<=h+1; i++){maze[i][0]='#';maze[i][w+1]='#';} > step=0; > CurPos=start; > > do > { > if(maze[CurPos.x][CurPos.y]=='.' || maze[CurPos.x][CurPos.y]=='@') > { > > e.di=1; e.pos=CurPos; Push(e, &s); > step++; > maze[CurPos.x][CurPos.y]='w'; > CurPos=NextPos(CurPos, 1); > > } > else{ > > if(!StackEmpty(s)){ > Pop(e, &s); > if(e.di==4) maze[e.pos.x][e.pos.y]='w'; > while(!StackEmpty(s)&&e.di==4){ > Pop(e,&s); > maze[e.pos.x][e.pos.y]='w'; > }//while > if(e.di<4){ > e.di++; Push(e, &s); > CurPos=NextPos(e.pos, e.di); > }//if > }//if > }//else > }while(!StackEmpty(s)); > cout<<step<<endl; > //print(maze, h+2, w+2); > free(s.base); > }// > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator