pku2251(广度优先搜索)
来源:互联网 发布:深圳工业生产数据 编辑:程序博客网 时间:2024/04/28 10:26
我是用广搜做的,可是TLE,很郁闷,现在还没找出错误来。。。。。
TLE的代码:
/*
* File: main.cpp
* Author: Administrator
*
* Created on 2010年1月27日, 上午11:51
*/
#include <stdlib.h>
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
#define Max_Size 35
bool visited[Max_Size][Max_Size][Max_Size], flag;
char ch[Max_Size][Max_Size][Max_Size];
int S_x, S_y, S_z, E_x, E_y, E_z, L, R, C;
struct Node {
int x, y, z;
int Time;
};
bool Is_Ok(int x, int y, int z) {
if (x >= 1 && x <= L && y >= 1 && y <= R && z >= 1 && z <= C)
return true;
else
return false;
}
void BFS() {
int i;
flag = 1;
queue<Node>q;
Node n1, n2, n3;
n1.Time = 0;
n1.x = S_x;
n1.y = S_y;
n1.z = S_z;
visited[S_x][S_y][S_z] = false;
q.push(n1);
while (!q.empty()) {
n2 = q.front();
q.pop();
if (n2.x == E_x && n2.y == E_y && n2.z == E_z) {
cout << "Escaped in " << n2.Time << " minute(s)./n";
flag = 0;
break;
}
n3.x += n2.x - 1;
n3.y = n2.y;
n3.z = n2.z;
if (Is_Ok(n3.x, n3.y, n3.z) && visited[n3.x][n3.y][n3.z]) {
visited[n2.x][n2.y][n2.z] = false;
n3.Time = n2.Time + 1;
q.push(n3);
}
n3.x = n2.x;
n3.y = n2.y - 1;
n3.z = n2.z;
if (Is_Ok(n3.x, n3.y, n3.z) && visited[n3.x][n3.y][n3.z]) {
visited[n2.x][n2.y][n2.z] = false;
n3.Time = n2.Time + 1;
q.push(n3);
}
n3.x = n2.x;
n3.y = n2.y;
n3.z = n2.z - 1;
if (Is_Ok(n3.x, n3.y, n3.z) && visited[n3.x][n3.y][n3.z]) {
visited[n2.x][n2.y][n2.z] = false;
n3.Time = n2.Time + 1;
q.push(n3);
}
n3.x = n2.x + 1;
n3.y = n2.y;
n3.z = n2.z;
if (Is_Ok(n3.x, n3.y, n3.z) && visited[n3.x][n3.y][n3.z]) {
visited[n2.x][n2.y][n2.z] = false;
n3.Time = n2.Time + 1;
q.push(n3);
}
n3.x = n2.x;
n3.y = n2.y + 1;
n3.z = n2.z;
if (Is_Ok(n3.x, n3.y, n3.z) && visited[n3.x][n3.y][n3.z]) {
visited[n2.x][n2.y][n2.z] = false;
n3.Time = n2.Time + 1;
q.push(n3);
}
n3.x = n2.x;
n3.y = n2.y;
n3.z = n2.z + 1;
if (Is_Ok(n3.x, n3.y, n3.z) && visited[n3.x][n3.y][n3.z]) {
visited[n2.x][n2.y][n2.z] = false;
n3.Time = n2.Time + 1;
q.push(n3);
}
}
if (flag == 1) {
cout << "Trapped!" << endl;
return;
}
}
/*
*
*/
int main(int argc, char** argv) {
int i, j, k;
while (scanf("%d%d%d", &L, &R, &C) != EOF)//scanf("%d%d%d",&L,&R,&C)
{
if (L == 0 && R == 0 && C == 0)break;
//memset(visited,false,sizeof(visited));
for (i = 1; i <= L; i++) {
for (j = 1; j <= R; j++) {
for (k = 1; k <= C; k++) {
cin >> ch[i][j][k];
//scanf("%c",&ch[i][j][k]);
if (ch[i][j][k] == 'S') {
S_x = i;
S_y = j;
S_z = k;
visited[i][j][k] = true;
} else if (ch[i][j][k] == 'E') {
E_x = i;
E_y = j;
E_z = k;
visited[i][j][k] = true;
} else if (ch[i][j][k] == '#') {
visited[i][j][k] = false;
} else if (ch[i][j][k] == '.') {
visited[i][j][k] = true;
}
}
//getchar();
}
// getchar();
}
//getchar();
BFS();
}
return (EXIT_SUCCESS);
}
- pku2251(广度优先搜索)
- 广度优先搜索算法
- 双向广度优先搜索
- 广度优先搜索法
- POJ1184Clerver_Writer:广度优先搜索
- Java广度优先搜索
- [AI]广度优先搜索
- 广度优先搜索-BFS
- 广度优先搜索算法
- 广度优先搜索算法
- BFS广度优先搜索
- 广度优先搜索 BFS
- 广度优先搜索
- [ 算法 ]广度优先搜索!
- 广度优先搜索
- 广度优先搜索算法
- 广度优先搜索算法
- 广度优先搜索
- windows应用小技巧
- 同一个指针居然可以分配两次内存而不出错。
- SonyEricsson新产品-vivaz
- 存储过程优化你的数据库系统
- 什么是云计算?让我来告诉你~
- pku2251(广度优先搜索)
- 消除火灾烟气效果好
- centos5.3 安装 kscope
- c++ 遍历目录查找文件
- Oracle 存储过程 定义 和 优点 与 函数 区别
- c语言获取文件长度的方法
- 《佛密诸事》第二十三章:神游新界法
- Oracle,MySQL,MSSQL Server和Access数据库的统计函数
- -----------我的一些笔记(六)------------------