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一直努力让他的草地充满鲜美 ...
随机推荐
- C语言获取文件SHA1哈希
安全散列算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)它定义了数字签名算法(Digital Signatur ...
- crm2011js子网格导航栏字段事件操作
- Eclipse SVN 安装注意事项
1. 下载SVN 插件 打开 Eclipse , 菜单条 Help -> Install New Software 在 Work with 这里加入网址 : http://subclipse ...
- easyui出口excel无法下载框弹出的办法来解决
使用前ajax发,码如下面(ActionUrl一般处理程序ashx路径): $.ajax({ url: ActionUrl + '?action=export&ID=' + $('#fm_ID ...
- import android.provider.Telephony cannot be resolved
android.provider.Telephony is hidden. http://androidxref.com/4.0.3_r1/xref/frameworks/base/core/java ...
- 尝到awk
我前几天写的sed,这个时候继续了解它的兄弟,awk,两者都使用,一种感觉.既可以用来处理场.假设你想要做文本处理.sed删除.匹配,一些频繁更换使用,假设每一行文本,你想深入,一些每行和列处理的,例 ...
- easyui DateTimeBox OK
一.datetimebox ok按钮没有点击事件,但是可以通过onSelect事件模拟出“点击了ok按钮一样的效果”,我的代码: 关键: 0,理解DateTimeBox控件,这个控件是由DateB ...
- 在 树莓派上使用 c++ libsockets library
rpi默认安装的编译器是gcc-4.6.2 而现在最新的c++ libsockets library 需要使用支持c++-11特征的编译器,即需要4.8.2才可以.为此,需要先升级编译器才可以支持编译 ...
- iOS8推送消息的回复处理速度
iOS8我们有一个新的通知中心,我们有一个新的通报机制.当在屏幕的顶部仅需要接收一个推拉向下,你可以看到高速接口,天赋并不需要输入应用程序的操作.锁定屏幕,用于高速处理可以推动项目. 推送信息,再次提 ...
- hdu1711 Number Sequence
Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], .... ...