当前位置: 代码迷 >> 综合 >> uva-532 - Dungeon Master
  详细解决方案

uva-532 - Dungeon Master

热度:82   发布时间:2023-12-19 11:38:05.0

一开始用DFS怎么也没过,后来用了BFS终于国了,以后求最短路就用BFS;

#include<stdio.h>
#include<string.h>
struct list
{int l;int r;int c;int depth;
}first,last,qun[30000],pan;
int min;
int map[50][50][50];
int get(char c)
{if(c=='.')return 1;if(c=='S')return 2;if(c=='E')return 3;return 0;
}
int bfs(int x,int y,int z)
{int head,tail;int visit[50][50][50];memset(visit,1,sizeof(visit));head=0;tail=0;qun[0].l=x;qun[0].r=y;qun[0].c=z;qun[0].depth=1;tail++;visit[x][y][z]=0;while(tail>head){pan=qun[head];head++;if(pan.l==last.l&&pan.r==last.r&&pan.c==last.c){min=pan.depth;return 1;}if(map[pan.l-1][pan.r][pan.c]&&visit[pan.l-1][pan.r][pan.c]){visit[pan.l-1][pan.r][pan.c]=0;qun[tail].l=pan.l-1;qun[tail].r=pan.r;qun[tail].c=pan.c;qun[tail].depth=pan.depth+1;tail++;}if(map[pan.l][pan.r-1][pan.c]&&visit[pan.l][pan.r-1][pan.c]){visit[pan.l][pan.r-1][pan.c]=0;qun[tail].l=pan.l;qun[tail].r=pan.r-1;qun[tail].c=pan.c;qun[tail].depth=pan.depth+1;tail++;}if(map[pan.l][pan.r][pan.c-1]&&visit[pan.l][pan.r][pan.c-1]){visit[pan.l][pan.r][pan.c-1]=0;qun[tail].l=pan.l;qun[tail].r=pan.r;qun[tail].c=pan.c-1;qun[tail].depth=pan.depth+1;tail++;}if(map[pan.l+1][pan.r][pan.c]&&visit[pan.l+1][pan.r][pan.c]){visit[pan.l+1][pan.r][pan.c]=0;qun[tail].l=pan.l+1;qun[tail].r=pan.r;qun[tail].c=pan.c;qun[tail].depth=pan.depth+1;tail++;}if(map[pan.l][pan.r+1][pan.c]&&visit[pan.l][pan.r+1][pan.c]){visit[pan.l][pan.r+1][pan.c]=0;qun[tail].l=pan.l;qun[tail].r=pan.r+1;qun[tail].c=pan.c;qun[tail].depth=pan.depth+1;tail++;}if(map[pan.l][pan.r][pan.c+1]&&visit[pan.l][pan.r][pan.c+1]){visit[pan.l][pan.r][pan.c+1]=0;qun[tail].l=pan.l;qun[tail].r=pan.r;qun[tail].c=pan.c+1;qun[tail].depth=pan.depth+1;tail++;}}return 0;
}
int main()
{int l,r,c,t,i,j,s;char str[50];while(scanf("%d%d%d%*c",&l,&r,&c)&&(l||r||c)){memset(map,0,sizeof(map));for(t=1;t<=l;t++){for(i=1;i<=r;i++){gets(str);for(j=1;j<=c;j++){s=get(str[j-1]);if(s)map[t][i][j]=1;if(s==2){first.l=t;first.r=i;first.c=j;}if(s==3){last.l=t;last.r=i;last.c=j;}}}if(t!=l)getchar();}if(bfs(first.l,first.r,first.c)){printf("Escaped in %d minute(s).\n",min-1);}else{printf("Trapped!\n");}}return 0;
}


  相关解决方案