Hdu1180 - 诡异的楼梯 - 广度优先搜索
2014-07-19 14:39
357 查看
#include<stdio.h> #include<string.h> int m,n; char map[25][25],map1[25][25]; int mark[25][25]; int to[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; struct { int x,y,id,stop/*0为不停,1为停*/; }queue[1000],s,e,now,next; int bfs() { memset(mark,0,sizeof(mark)); int fr,ed,i,j; fr=ed=0; s.stop=0; s.id=0; queue[ed++]=s; mark[s.x][s.y]=1; while(fr<ed) { now=queue[fr++]; if(now.id%2==0) { for(i=0;i<m;i++) { for(j=0;j<n;j++) { map1[i][j]=map[i][j]; } } } else { for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(map[i][j]=='|') { map1[i][j]='-'; } else if(map[i][j]=='-') { map1[i][j]='|'; } else { map1[i][j]=map[i][j]; } } } } if(now.x==e.x&&now.y==e.y&&now.stop!=1) { return now.id; } if(now.stop==1) { next.id=now.id+1; next.x=now.x; next.y=now.y; next.stop=0; queue[ed++]=next; continue; } for(i=0;i<4;i++) { next.x=now.x+to[i][0]; next.y=now.y+to[i][1]; if(i<2&&map1[next.x][next.y]=='-') { next.stop=1; } else if(i>=2&&map1[next.x][next.y]=='|') { next.stop=1; } else { next.stop=0; } if(map1[next.x][next.y]=='-'||map1[next.x][next.y]=='|') { next.x+=to[i][0]; next.y+=to[i][1]; } if(next.x<0||next.y<0||next.x>=m||next.y>=n||mark[next.x][next.y]==1||map1[next.x][next.y]=='*') { continue; } next.id=now.id+1; mark[next.x][next.y]=1; queue[ed++]=next; } } } int main() { int i,j; while(scanf("%d%d",&m,&n)!=EOF) { for(i=0;i<m;i++) { getchar(); for(j=0;j<n;j++) { scanf("%c",&map[i][j]); if(map[i][j]=='S') { s.x=i; s.y=j; } if(map[i][j]=='T') { e.x=i; e.y=j; } } } printf("%d\n",bfs()); } }
相关文章推荐
- HDU 1180 诡异的楼梯
- HDU1180 诡异楼梯
- 【BFS】HDU_1180_诡异的楼梯
- HDU 1180 诡异的楼梯(搜索 -- BFS)
- HDU 1180 诡异的楼梯(BFS:时间动态图)
- hdu 1180 诡异的楼梯
- HDU【1180】诡异的楼梯
- HDU 1180 诡异的楼梯
- HDU 1180 诡异的楼梯
- HDU1180 诡异的楼梯[bfs]
- hdu 1180 诡异的楼梯
- HDU-1180 诡异的楼梯(BFS)
- HDU 1180 诡异的楼梯
- 杭电ACM1180——诡异的楼梯~~广度优先搜索
- hdu 1180:诡异的楼梯(BFS广搜)
- HDU 1180 诡异的楼梯【BFS广搜+优先队列】
- hdu 1180(广搜升阶)诡异的楼梯
- HDU1180-诡异的楼梯(bfs)
- hdu 1180 诡异的楼梯
- HDU 1180 诡异的楼梯