zoukankan      html  css  js  c++  java
  • Week12 作业 B

    题目描述:

    zjm被困在一个三维的空间中,现在要寻找最短路径逃生!
    空间由立方体单位构成。
    zjm每次向上下前后左右移动一个单位需要一分钟,且zjm不能对角线移动。
    空间的四周封闭。zjm的目标是走到空间的出口。
    是否存在逃出生天的可能性?如果存在,则需要多少时间?

    思路:

    因为要求的是最短时间,所以在三维数组上跑BFS即可

    不能对角线移动,所以在一个点只有上下左右前后六种移动方案

    代码:

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <queue>
    using namespace std;
    int dx[]={0,0,0,-1,0,1,0};  
    int dy[]={0,0,0,0,1,0,-1};
    int dz[]={0,1,-1,0,0,0,0};     //6 directions : up down front right back left
    int Z,X,Y;
    int G[35][35][35],vis[35][35][35];
    int Sx,Sy,Sz;
    int Tx,Ty,Tz;
    struct Point
    {
    	int x,y,z;
    	int dep;
    };
    int bfs()
    {
    	queue<Point> q;
    	q.push({Sx,Sy,Sz,0});
    	vis[Sx][Sy][Sz]=1;
    	while(!q.empty())
    	{
    		Point now=q.front();
    		q.pop();
    		if(now.x==Tx&&now.y==Ty&&now.z==Tz) 	return now.dep;
    		for(int i=1;i<=6;i++)
    		{
    			int nx=dx[i]+now.x,ny=dy[i]+now.y,nz=dz[i]+now.z;
    			if(nx>=1&&nx<=X&&ny>=1&&ny<=Y&&nz>=1&&nz<=Z&&G[nx][ny][nz]==0
    				&&vis[nx][ny][nz]==0)
    			{
    				q.push({nx,ny,nz,now.dep+1});
    				vis[nx][ny][nz]=1;
    			}
    		}
    	}
    	return -1;
    }
    int main()
    {
    	while(scanf("%d %d %d",&Z,&X,&Y) ==3 && !(X==0&&Y==0&&Z==0))
    	{
    		memset(G,0,sizeof(G));
    		memset(vis,0,sizeof(vis));
    		for(int k=1;k<=Z;k++)
    			for(int i=1;i<=X;i++)
    			{
    				string s;
    				cin>>s;
    				for(int j=0,n=s.size();j<n;j++)
    				{
    					if(s[j]=='S') Sx=i,Sy=j+1,Sz=k;
    					else if(s[j]=='#') G[i][j+1][k]=1;
    					else if(s[j]=='E') Tx=i,Ty=j+1,Tz=k;
    				}
    			}
    		int ans=bfs();
    		if(ans==-1) cout<<"Trapped!"<<endl;
    		else printf("Escaped in %d minute(s).
    ",ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    Banner实现无线轮播
    二维码生成
    自定义View圆环
    百度地图
    OkHttp解析
    自定义控件生成随机数
    OkHttp中文文档
    Da购物车
    Angular过滤器
    popupWindow
  • 原文地址:https://www.cnblogs.com/qingoba/p/12983876.html
Copyright © 2011-2022 走看看