训练总结8.2

来源:互联网 发布:十字绣制图软件 编辑:程序博客网 时间:2024/06/13 07:21

今天做的题,写完wa,找错真的找了好久,看题解,也发现方法其实差不许多,用各种方法试,找出了几处错误,最后ac,原来做的搜索都是二维的,今天的立体搜索让人印象深刻。

立体搜索也是是否能从走出地下城(迷宫),三维的搜索也是很经典。

Dungeon Master


Sample Input
3 4 5S.....###..##..###.#############.####...###########.#######E1 3 3S###E####0 0 0
 

Sample Output
Escaped in 11 minute(s).Trapped!

#if 0#include<iostream>#include<cstring>#include<queue>using namespace std;int l,c,r,step[50][50][50],ei,ej,ek,si,sj,sk;char a[50][50][50];bool flag[50][50][50],flag1;int f[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};int ok(int k,int i, int j){if(k>=0&&k<l&&i>=0&&i<r&&k>=0&& k<c) return 1;elsereturn 0;}void bfs(int z,int x,int y){queue<int> q;q.push(z);q.push(x);q.push(y);   while(!q.empty()) {int ai,aj,ak;ak=q.front();q.pop();ai=q.front();q.pop();aj=q.front();q.pop();if(ak==ek && ai==ei && aj==ej){cout<<step[ak][ai][aj]<<endl;flag1=1;return;}for(int i=0; i<6; i++) {intki=ak+f[i][0];int ii=ai+f[i][1];int ji=aj+f[i][2];if(ki==ek && ii==ei && ji==ej){cout<<"Escaped in "<<step[ak][ai][aj]+1<<" minute(s)."<<endl;flag1=1;return;}            if(a[ki][ii][ji]=='.' && ok(ki,ii,ji) && flag[ki][ii][ji]==0){flag[ki][ii][ji]=1;q.push(ki);q.push(ii);q.push(ji);step[ki][ii][ji]=step[ak][ai][aj]+1;}}}}int main(){while(cin>>l>>r>>c && l+r+c){memset(step,0,sizeof(step));memset(a,0,sizeof(a));memset(flag,0,sizeof(flag));flag1=0,ek=0,ei=0,ej=0,si=sj=sk=0;for(int k=0; k<l; k++)for(int i=0; i<r; i++)for(int j=0; j<c; j++){cin>>a[k][i][j];if(a[k][i][j]=='S'){sk=k;si=i;sj=j;}if(a[k][i][j]=='E'){ek=k;ei=i;ej=j;} } flag[sk][si][sj]=1; bfs(sk,si,sj);if(flag1==0)cout<<"Trapped!"<<endl;}}#endif 

原创粉丝点击