hdu-1240

来源:互联网 发布:mac怎么用latex 编辑:程序博客网 时间:2024/06/14 19:53

三维的BFS

#include <iostream>#include <algorithm>#include <set>#include <map>#include <string.h>#include <queue>#include <sstream>#include <stdio.h>#include <math.h>#include <stdlib.h>using namespace std;char str[10];int n;int sx,sy,sz;int ex,ey,ez;int ans ;int vis[33][33][33];char p[33][33][33];int dir[6][3] = {{0,0,1},{0,0,-1},{1,0,0},{-1,0,0},{0,-1,0},{0,1,0}};struct node {int x,y,z;int step;};int bfs (){memset(vis,0,sizeof(vis));node qq,qqq;qq.x = sx;qq.y = sy;qq.z = sz;qq.step = 0;vis[qq.x][qq.y][qq.z] = 1;queue<node> q;q.push(qq);while (!q.empty()){qqq = q.front();q.pop();if (qqq.x == ex && qqq.y == ey && qqq.z == ez){ans = qqq.step;return 1;}for(int i=0;i<6;i++){qq.x = qqq.x + dir[i][0];qq.y = qqq.y + dir[i][1];qq.z = qqq.z + dir[i][2];qq.step = qqq.step;if (qq.x < 0 || qq.x >=n || qq.y < 0 || qq.y >=n || qq.z < 0 || qq.z >=n )continue;if(vis[qq.x][qq.y][qq.z] || p[qq.x][qq.y][qq.z]=='X')                continue;vis[qq.x][qq.y][qq.z] = 1;qq.step = qqq.step + 1;q.push(qq);}}return 0;}int main(){while (scanf ("%s%d",str,&n)!=EOF){for(int i=0;i<n;i++){for(int j=0;j<n;j++){scanf("%s",p[i][j]);}}scanf("%d %d %d",&sx,&sy,&sz);scanf("%d %d %d",&ex,&ey,&ez);scanf("%s",str);p[ex][ey][ez] = 0;if (bfs()){printf("%d %d\n",n,ans);}else printf("NO ROUTE\n");}return 0;}


0 0
原创粉丝点击