不写了很长的时间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. 从零开始学Xamarin.Forms(五) 技巧

    原文:从零开始学Xamarin.Forms(五) 技巧 由于HTML5规范于2014年10月终于定稿,公司.net开发人员较少,国内外已有了较为成熟的UI框架.手机软件硬件的快速发展等等原因,所以我就 ...

  2. SOHO路由器的静态路由的不同

    网络拓扑如下,其中RA与RB皆为TP-LINK家用路由器 最终在TP-LINK官网的官网上找到这么一段话 静态路由是在路由器中手工设置的固定的路由条目.我司路由器静态路由是基于ICMP重定向原理,与其 ...

  3. 设计模式10---设计模式之原型模式(Prototype)

    1.场景模式 考虑这样一个实际应用:订单处理系统 里面有一个保存订单的功能,当产品数量超过1000份以后,拆成两份订单,再超,那么就再拆.直到每份订单不超过1000为止,订单有两种,一个是个人订单,一 ...

  4. Java EE (5) -- Java EE 6 JavaServer Faces Developer Certified Expert(1z0-896)

    Section 1: Essentials of JSF2.0 Identify the features of JSF such as Facelets, BookMarkable View, AJ ...

  5. 设计模式C++达到 3.抽象工厂

    简单工厂模式和工厂模式 要求 同类型的产品子类有共同的方法.这限制了产品子类的扩展.抽象工厂能client它提供了一个接口,它是client而不必指定产品的详细信息.创建多个产品系列产品对象.在归为一 ...

  6. 阿赫亚web安全JSON

    前言 JSON(JavaScript Object Notation),可以说,这一事实,浏览器,server数据交换标准.的格式如XML,或者其他自己定义的格式会越来越少. 为什么JSON这么流行? ...

  7. 判断闰年(go语言版本)

    import "strconv" func IsLeapYear(y string) bool { //y == 2000, 2004 //判断是否为闰年 year, _ := s ...

  8. Case learning

    bad case: <?php foreach($user_detail AS $val) { if(!empty($val->portrait)) { //假设这个循环从来没有到达过 $ ...

  9. ZooKeeper实践方案:(7) 分布式锁

    1.基本介绍 分布式锁是控制分布式系统之间同步訪问共享资源的一种方式,须要相互排斥来防止彼此干扰来保证一致性. 利用Zookeeper的强一致性能够完毕锁服务.Zookeeper的官方文档是列举了两种 ...

  10. 最简单的视音频播放演示样例8:DirectSound播放PCM

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...