初学广搜算法可以看 http://blog.csdn.net/chuck001002004/article/details/50404122
POJ2251:http://poj.org/problem?id=2251
题意:输入l,r,c 三个数,代表一个 l 层的 r * c 大小的迷宫,S表示起点,E表示终点,‘ . ’表示可以走,‘#’表示走不了,求从起点到终点的最少步数,若走不出则输出“Trapped!”
分析:是不是被吓住了!!!其实就是比二维的迷宫多了上下两个点而已,写入BFS算法就是了。
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <queue>
using namespace std;
char a[35][35][35];
int vis[35][35][35],l,r,c;
int si,sj,sk,ei,ej,ek;//起点和终点对应的坐标
int dl[]={-1,1}; //变动上下
int dr[]={1,0,-1,0}; //变动左右
int dc[]={0,1,0,-1}; //变动前后
struct node
{
int l,r,c,sum; //定义点h尤其对应的层数,横纵坐标和步数值
}h;
queue <node> que; //建立队列
int BFS()
{
//算法开始前清空队列
while(!que.empty())
q