USACO maze1 BFS
不写了很长的时间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的更多相关文章
- 【USACO 2.4】Overfencing(bfs最短路)
H行W列的迷宫,用2*H+1行的字符串表示,每行最多有2*W+1个字符,省略每行后面的空格.迷宫的边界上有且仅有两个出口,求每个点出发到出口的最短路. +-+-+-+-+-+ | | +-+ +-+ ...
- USACO Section 3.3 Camlot(BFS)
BFS.先算出棋盘上每个点到各个点knight需要的步数:然后枚举所有点,其中再枚举king是自己到的还是knight带它去的(假如是knight带它的,枚举king周围的2格(网上都这么说,似乎是个 ...
- USACO 3.2 msquare 裸BFS
又是个裸BFS... 和西安网赛那道1006一样的,只不过加上了要记录方案.顺便复习map 记录方案直接在bfs队列的结点里加一个vector<int> opt,把从开头一直到当前结点的操 ...
- Cow Relays 【优先队列优化的BFS】USACO 2001 Open
Cow Relays Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- USACO 2012 March Silver Tractor /// 优先队列BFS oj21567
题目大意: 输入n,(x,y):n为阻挡的草堆数量,(x,y)为开始时拖拉机所在的位置 接下来n行每行一个坐标(a,b):为各个草堆的坐标 输出拖拉机要回到原点(0,0)需要移动的草堆数量 Sampl ...
- POJ3083Catch That Cow[BFS]
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 77420 Accepted: 24457 ...
- 【USACO 2.1】Healthy Holsteins
/* TASK: holstein LANG: C++ URL: http://train.usaco.org/usacoprob2?a=SgkbOSkonr2&S=holstein SOLV ...
- 【USACO】clocks 遇到各种问题 最后还是参考别人的思路
//放在USACO上一直通不过 不知道哪里出了问题 输出的n总是等于1 但是BFS递归的次数是对的 <----这个问题解决了 局部变量压入queue中返回就是对的了 #include<io ...
- 乳草的入侵//BFS
P1030 乳草的入侵 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO OCT09 6TH 描述 Farmer John一直努力让他的草地充满鲜美 ...
随机推荐
- CSDN的SDCC大会(2013)中使用的PPT分享
SDCC大会今天开完个.呵呵~ PPT下载链接在最后面,对内幕不感兴趣的可以直接无视下面的种种啰嗦直接“嗖”到最后. 这里说说这个大会中我的Topic. 此前CSDN向我约了一个主题,我回复说, 我可 ...
- 多线程——达到Runnable介面
部分博客(多线程--继承Thread类)介绍了java多线程的第一种实现方法--继承Thread类.这篇博客介绍另外一种方法--实现Runnable接口,并实现run方法. 还用上篇博客的样例.如今用 ...
- 安装zookeeper集群
zookeeper集群的安装 顾名思义zookeeper就是动物园管理员,他是用来管hadoop(大象).Hive(蜜蜂).pig(小猪)的管理员, Apache Hbase和 Apache So ...
- Array of Objects
You should be comfortable with the content in the modules up to and including the module "Array ...
- ubuntu12.04 安装和配置jdk1.7
第一步:下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586 ...
- GPS 偏移校正(WGS-84) 至(GCJ-02) java版本号以实现
public class EvilTransform { final static double pi = 3.14159265358979324; // // // a = 6378245.0, 1 ...
- [思考] hdu 4811 Ball
意甲冠军: 有三种颜色的小珠,每种颜色的量R,Y,B 转球进入桌面成序,有多少种不同的颜色分别砍下的球在球门前+有多少身后球不同的颜色 问:最大的总比分值 思考: 球和后面的球先放好.剩下的就放中间了 ...
- uva 10671 - Grid Speed(dp)
题目链接:uva 10671 - Grid Speed 题目大意:给出N,表示在一个N*N的网格中,每段路长L,如今给出h,v的限制速度,以及起始位置sx,sy,终止位置ex,ey,时间范围st,et ...
- 重新想象 Windows 8 Store Apps (20) - 动画: ThemeAnimation(主题动画)
原文:重新想象 Windows 8 Store Apps (20) - 动画: ThemeAnimation(主题动画) [源码下载] 重新想象 Windows 8 Store Apps (20) - ...
- A左右ndroid正在使用Uri监视数据库中的更改
在监控数据库在线原创文章是非常小的变化,基本上没有找到一个实际的问题.所以,如果你看到一个有点蓝牙源代码,写一个Demo.在这里,供大家参考,查看源代码: src有三个文件MyDataProvider ...