/*改了无数次bug,真是被自己蠢到了*/ /* 6 5 ..S.. .#.#. .#.#. .#.#. .#.#. .E... */ #include<stdio.h> #include<string.h> typedef struct { int x1; int y1; char data; int num; }jiegou; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { char a[100][100]; int i,j; int x,y; int flag=0,flag2; jiegou wtf[1000]; int wtfs=0; int wtfe=0; int ans=0; int biaoji[100][100]; memset(biaoji,0,sizeof(biaoji)); memset(a,0,sizeof(a)); getchar(); for(i=0;i<n;i++) scanf("%s",&a[i]); for(x=0;x<n;x++) { for(y=0;y<m;y++) { if(a[x][y]=='S') { flag=1; break; } } if(flag==1) break; } wtf[0].x1=x; wtf[0].y1 =y; wtf[0].data =a[x][y]; wtf[0].num =0; biaoji[x][y]=1; /* 5 5 S.... ..... ..... ..... ....E */ for(i=0;i<1002;i++) { ans=wtf[i].num ; if(wtf[i].data =='E') break; if(wtf[i].x1 +1<n&&wtf[i].y1 <m&&!biaoji[wtf[i].x1 +1][wtf[i].y1]&&a[wtf[i].x1 +1][wtf[i].y1 ]!='#') { flag2=wtfs+1; wtf[flag2].data =a[wtf[i].x1 +1][wtf[i].y1]; wtf[flag2].x1 =wtf[i].x1 +1; wtf[flag2].y1 =wtf[i].y1; wtf[flag2].num=wtf[i].num +1; biaoji[wtf[i].x1 +1][wtf[i].y1]++; wtfs++; } if(wtf[i].x1 -1>=0&&wtf[i].y1 <m&&!biaoji[wtf[i].x1 -1][wtf[i].y1]&&a[wtf[i].x1 -1][wtf[i].y1 ]!='#') { flag2=wtfs+1; wtf[flag2].data =a[wtf[i].x1 -1][wtf[i].y1]; wtf[flag2].x1 =wtf[i].x1 -1; wtf[flag2].y1 =wtf[i].y1; wtf[flag2].num=wtf[i].num +1; biaoji[wtf[i].x1 -1][wtf[i].y1]++; wtfs++; } if(wtf[i].x1<n&&wtf[i].y1-1 >=0&&!biaoji[wtf[i].x1][wtf[i].y1-1]&&a[wtf[i].x1 ][wtf[i].y1-1 ]!='#') { flag2=wtfs+1; wtf[flag2].data =a[wtf[i].x1][wtf[i].y1-1]; wtf[flag2].x1 =wtf[i].x1; wtf[flag2].y1 =wtf[i].y1-1; wtf[flag2].num=wtf[i].num +1; biaoji[wtf[i].x1][wtf[i].y1-1]++; wtfs++; } if(wtf[i].x1<n&&wtf[i].y1+1 <m&&!biaoji[wtf[i].x1][wtf[i].y1+1]&&a[wtf[i].x1 ][wtf[i].y1+1]!='#') { flag2=wtfs+1; wtf[flag2].data =a[wtf[i].x1][wtf[i].y1+1]; wtf[flag2].x1 =wtf[i].x1; wtf[flag2].y1 =wtf[i].y1+1; wtf[flag2].num=wtf[i].num +1; biaoji[wtf[i].x1][wtf[i].y1+1]++; wtfs++; } } printf("%d\n",ans); } return 0; } |
Double click to view unformatted code.