简单的BFS   1a

 /*
从起点到终点
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<queue>
#include<iostream>
using namespace std; const int maxn = ;
const int Max = ;
char mat[ maxn ][ maxn ][ maxn ];
int vis[ maxn ][ maxn ][ maxn ];
const int dx[]={,,,-,,};
const int dy[]={,-,,,,};
const int dz[]={,,,,,-};
struct node{
int x,y,z,ti;
}my_start,my_end; bool ok( node cur ){
if( mat[ cur.z ][ cur.x ][ cur.y ]=='X'||vis[ cur.z ][ cur.x ][ cur.y ]== )
return false;
else
return true;
} bool inside( node cur,int n ){
if( cur.x>=&&cur.x<n&&cur.y>=&&cur.y<n&&cur.z>=&&cur.z<n )
return true;
else
return false;
} int bfs( int n ){
if( my_start.x==my_end.x&&my_start.y==my_end.y&&my_start.z==my_end.z )
return ;
queue<node>q;
node cur,nxt;
int ans = Max;
cur.x = my_start.x;
cur.y = my_start.y;
cur.z = my_start.z;
cur.ti = ;
vis[ cur.z ][ cur.x ][ cur.y ] = ;
q.push( cur );
while( !q.empty() ){
cur = q.front();
q.pop();
if( cur.x==my_end.x&&cur.y==my_end.y&&cur.z==my_end.z ){
ans = min( ans,cur.ti );
}
for( int i=;i<;i++ ){
nxt = cur;
nxt.ti ++;
nxt.x += dx[i];
nxt.y += dy[i];
nxt.z += dz[i];
if( inside( nxt,n )==false||ok( nxt )==false ) continue;
vis[ nxt.z ][ nxt.x ][ nxt.y ] = ;
q.push( nxt );
}
} if( ans>=Max ) return -;
else return ans;
} int main(){
int N;
char str[ maxn ];
while( scanf("%s%d",str,&N)!=EOF ){
memset( vis,,sizeof( vis ) );
for( int i=;i<N;i++ ){
for( int j=;j<N;j++ ){
scanf("%s",mat[ i ][ j ]);
}
}
//mat[i][j][k] 层 行 列
scanf("%d%d%d",&my_start.y,&my_start.x,&my_start.z);
scanf("%d%d%d",&my_end.y,&my_end.x,&my_end.z);
//列 行 层
scanf("%s",str);
int ans = bfs( N );
if( ans==- ) printf("NO ROUTE\n");
else printf("%d %d\n",N,ans);
}
return ;
}

最新文章

  1. 【Win 10应用开发】把文件嵌入到XML文档
  2. WebSocket 学习(三)--用nodejs搭建服务器
  3. This TableLayout layout or its LinearLayout parent is possibly useless
  4. c语言调用函数打印一维数组-2-指针
  5. 以Unix之名
  6. C#将DataTable转换成list的方法
  7. CountDownLatch、CyclicBarrier和Semaphore
  8. android ipc通信机制之之三,进程通讯方式。
  9. java 读取文件到String(解决中文乱码)
  10. Eclipse配置Git
  11. WPF TextSelection获取选中部分内容
  12. For循环复杂练习
  13. PHP redis操作类 个人总结
  14. leetcode — rotate-list
  15. 【转载】URL编码与两次encodeURI
  16. ubuntu14.04安装 Apache2 并配置https
  17. C语言 -- 字符串详解
  18. 邮件的DNS设置
  19. 解决python3读写中文txt时UnicodeDecodeError : &#39;ascii&#39; codec can&#39;t decode byte 0xc4 in position 5595: ordinal not in range(128) on line 0的问题
  20. cmd enabledelayedexpansion

热门文章

  1. 盒模型Box Model(浮动)
  2. ASP.Net Core 运行在Linux(Ubuntu)
  3. 关于数据导出到Excel科学计数法的处理
  4. JavaScript 学习笔记: 扩充类型的功能
  5. js和jq使用submit方法无法提交表单
  6. 导出Execel
  7. 比之前那个版本更简单的C语言实现的比较大小
  8. Wix: Using Patch Creation Properties - Minor Update
  9. day20 在php中通过php语句操作数据库
  10. web页面背景色控制