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 |
哪位大哥帮下忙看看?多谢!!!!!!!!!#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