不写了很长的时间bfs该,很长一段时间的中间失误,当延期一次延伸成功的新节点的节点应该被标记为参观。否则,在某些情况下无限期延长队列。

输入一个小坑爹处理称号,能够进来当字符串被读取。然后用周围的墙上每个节点的数组变量的情况下,最后一次从搜索的两个出口。装满水,就拿小决赛两次值,然后取整个地图的最大值作为结果

/*
ID:kevin_s1
PROG:maze1
LANG:C++
*/ #include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
#include <cstdlib>
#include <list>
#include <cmath> using namespace std; #define INF 9999999
#define MAXH 110
#define MAXW 50
#define MAXHH 250
#define MAXWW 100 //gobal variable====
int H, W;
int HH, WW;
string maze[MAXHH];
int G[MAXH][MAXW];
int Gtmp[MAXH][MAXW];
int wall[MAXH][MAXW][4]; struct entry{
int x, y;
}; vector<entry> entrys;
int result;
int visited[MAXH][MAXW]; int direct[4][2] = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}};
queue<entry> que;
//================== //function==========
void print(){
/*
for(int i = 0; i < HH; i++){
for(int j = 0; j < WW; j++){
cout<<maze[i][j];
}
cout<<endl;
}
*/
for(int i = 1; i <= H; i++){
for(int j = 1; j <= W; j++){
cout<<Gtmp[i][j]<<"|"<<G[i][j]<<" ";
}
cout<<endl;
}
} void BFS(entry start){
que.push(start);
G[start.x][start.y] = 1;
visited[start.x][start.y] = 1;
while(!que.empty()){
entry top = que.front();
que.pop();
for(int i = 0; i < 4; i++){
if(wall[top.x][top.y][i] == 1){
entry nw;
nw.x = top.x + direct[i][0];
nw.y = top.y + direct[i][1];
if(nw.x < 1 || nw.x > H || nw.y < 1 || nw.y > W)
continue;
if(visited[nw.x][nw.y] == 0){
G[nw.x][nw.y] = G[top.x][top.y] + 1;
que.push(nw);
visited[nw.x][nw.y] = 1;
}
}
}
}
return;
} //================== int main(){
freopen("maze1.in","r",stdin);
freopen("maze1.out","w",stdout);
cin>>W>>H;
HH = 2 * H + 1;
WW = 2 * W + 1;
getchar();
for(int i = 0; i < HH; i++){
getline(cin, maze[i]);
}
memset(wall, 0, sizeof(wall));
for(int i = 1; i <= H; i++){
for(int j = 1; j <= W; j++){
if(maze[2*i][2*j-1] == ' ')
wall[i][j][0] = 1;
if(maze[2*i-2][2*j-1] == ' ')
wall[i][j][1] = 1;
if(maze[2*i-1][2*j-2] == ' ')
wall[i][j][2] = 1;
if(maze[2*i-1][2*j] == ' ')
wall[i][j][3] = 1;
}
} entry tmp;
for(int i = 1; i <= H; i++){
if(wall[i][1][2] == 1){
tmp.x = i, tmp.y = 1;
entrys.push_back(tmp);
}
if(wall[i][W][3] == 1){
tmp.x = i, tmp.y = W;
entrys.push_back(tmp);
}
} for(int j = 1; j <= W; j++){
if(wall[1][j][1] == 1){
tmp.x = 1, tmp.y = j;
entrys.push_back(tmp);
}
if(wall[H][j][0] == 1){
tmp.x = H, tmp.y = j;
entrys.push_back(tmp);
}
} result = 0;
memset(visited, 0, sizeof(visited));
memset(G, INF, sizeof(G));
BFS(entrys[0]);
for(int i = 1; i <= H; i++){
for(int j = 1; j <= W; j++)
Gtmp[i][j] = G[i][j];
}
memset(visited, 0, sizeof(visited));
memset(G, INF, sizeof(G));
BFS(entrys[1]); for(int i = 1; i <= H; i++){
for(int j = 1; j <= W; j++){
G[i][j] = min(G[i][j], Gtmp[i][j]);
if(G[i][j] > result && G[i][j] != INF)
result = G[i][j];
}
} cout<<result<<endl;
return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

USACO maze1 BFS的更多相关文章

  1. 【USACO 2.4】Overfencing(bfs最短路)

    H行W列的迷宫,用2*H+1行的字符串表示,每行最多有2*W+1个字符,省略每行后面的空格.迷宫的边界上有且仅有两个出口,求每个点出发到出口的最短路. +-+-+-+-+-+ | | +-+ +-+ ...

  2. USACO Section 3.3 Camlot(BFS)

    BFS.先算出棋盘上每个点到各个点knight需要的步数:然后枚举所有点,其中再枚举king是自己到的还是knight带它去的(假如是knight带它的,枚举king周围的2格(网上都这么说,似乎是个 ...

  3. USACO 3.2 msquare 裸BFS

    又是个裸BFS... 和西安网赛那道1006一样的,只不过加上了要记录方案.顺便复习map 记录方案直接在bfs队列的结点里加一个vector<int> opt,把从开头一直到当前结点的操 ...

  4. Cow Relays 【优先队列优化的BFS】USACO 2001 Open

    Cow Relays Time Limit: 1000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Tota ...

  5. USACO 2012 March Silver Tractor /// 优先队列BFS oj21567

    题目大意: 输入n,(x,y):n为阻挡的草堆数量,(x,y)为开始时拖拉机所在的位置 接下来n行每行一个坐标(a,b):为各个草堆的坐标 输出拖拉机要回到原点(0,0)需要移动的草堆数量 Sampl ...

  6. POJ3083Catch That Cow[BFS]

    Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 77420   Accepted: 24457 ...

  7. 【USACO 2.1】Healthy Holsteins

    /* TASK: holstein LANG: C++ URL: http://train.usaco.org/usacoprob2?a=SgkbOSkonr2&S=holstein SOLV ...

  8. 【USACO】clocks 遇到各种问题 最后还是参考别人的思路

    //放在USACO上一直通不过 不知道哪里出了问题 输出的n总是等于1 但是BFS递归的次数是对的 <----这个问题解决了 局部变量压入queue中返回就是对的了 #include<io ...

  9. 乳草的入侵//BFS

    P1030 乳草的入侵 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO OCT09 6TH 描述 Farmer John一直努力让他的草地充满鲜美 ...

随机推荐

  1. ThinkPHP的全部配置选项

    return array( /* Dispatch设置 */ 'DISPATCH_ON' => true, // 是否启用Dispatcher // URL模式: 0 普通模式 1 PATHIN ...

  2. 开源Office Word——DocX

    1.前言 请阅读前请看以下这位大神的文章 http://www.cnblogs.com/asxinyu/archive/2013/02/22/2921861.html 另附两个附件 1.DocX.DL ...

  3. DLNA它 Error, can&#39;t findlibavformat ! 解

    DLNA库版本号为libdlna-0.2.4 运行./configure出错: ------------------------------ Error, can't findlibavformat ...

  4. WCF异常传播

    传送至客户端的异常肯定是CommunitionException类型,包括一般的通信过程中出错而引发的CommunicationException类型,System.IdentityModel.Sel ...

  5. Wind River Linux 6 Security Profile

    2692407267@qq.com,很多其它内容请关注http://user.qzone.qq.com/2692407267 Wind River Linux 6 Security Profile

  6. FPGA开机状态

    最近调试FPGA电路时发现一个问题,我从来没有注意过.我们都知道Xilinx的FPGA有三种功率M引脚,这是为了让我们配置三个引脚FPGA装载机模式,什么是主要的字符串.从字符串.并行等.,该手册有. ...

  7. ibatis实战之OR映射

    相对Hibernate等ORM实现而言,ibatis的映射配置更为简洁直接,以下是一个典型的配置文件. <?xml version="1.0" encoding=" ...

  8. Google Maps Android API v2 (4)- 地图类型

    地图类型 地图内的谷歌地图的Android API的种类有很多.地图的类型管辖地图的整体代表性.例如,地图集通常包含政治地图,专注于显示边界和道路地图,显示了一个城市或地区的所有道路. Android ...

  9. 用于编译cm-12.0 的 local_manifest.xml文件

    将代码保存为 romservice.xml文件 <?xml version="1.0" encoding="UTF-8"?> <manifes ...

  10. Cocos2dx 3.0开发环境的搭建--Eclipse建立在Android工程

    一.前言: 这部分描述了Cocos2d-x 3.0的一些基础内容,以及在Eclipse上上编译我们的Cocos2d-x项目,成功把Helloworld执行起来了.看完本篇博客之后.你就会知道Cocos ...