hdu 1241 || poj 1562 Oil Deposits(搜索:BFS水题)

2024-06-14 03:18

本文主要是介绍hdu 1241 || poj 1562 Oil Deposits(搜索:BFS水题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

很水的一道题啊,写了一个多小时...

刚开始读数据的时候用getchar4个样例中有的能读入正确,有的不能...感觉很奇葩

然后改用读入字符串

最要说的一个问题是因为中间用全局变量总有一个bug!!!

查了好一会才查出来...以后要注意了!

在杭电上交题老师MLE, 明明就只有100*100的数组尴尬

看到下面评论说这个题好像很怪,有的人说同样一份代码隔了一天交居然就过了

而且有的人代码连样例都过不了也AC了...

于是我倒poj上交题,内存才200+,16msAC

实在是奇怪啊...

代码如下:

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAXN 101
#define LL long long
using namespace std;int m, n, g[MAXN][MAXN];
struct Node {int x, y;
};
int dir[8][2] = {{-1,-1}, {-1,0}, {-1,+1}, {0,-1}, {0,+1}, {+1,-1}, {+1,0}, {+1,+1}};
queue<Node> q;
char str[MAXN];void judgequeue(int x, int y) {Node tmp;if(x>=0 && x<m && y>=0 && y<n && g[x][y]==0) {tmp.x = x;tmp.y = y;q.push(tmp);}
}void bfs(int x, int y) {while(!q.empty())q.pop();Node cur;cur.x = x;cur.y = y;q.push(cur);while(!q.empty()) {Node tmp = q.front();q.pop();g[tmp.x][tmp.y] = 1;for(int i=0; i<8; ++i) {judgequeue(tmp.x+dir[i][0], tmp.y+dir[i][1]);}}
}int main(void) {char ch;int ans;while(scanf("%d%d", &m, &n)!=EOF && m) {memset(g, 0, sizeof(g));for(int i=0; i<m; ++i) {scanf("%s", str);for(int j=0; j<n; ++j) {ch = str[j];if(ch == '*')g[i][j] = 1;}}ans = 0;for(int i=0; i<m; ++i) {for(int j=0; j<n; ++j) {if(g[i][j] == 0) {ans++;bfs(i, j);}}}cout << ans << endl;}return 0;
}


这篇关于hdu 1241 || poj 1562 Oil Deposits(搜索:BFS水题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059226

相关文章

hdu1254(嵌套bfs,两次bfs)

/*第一次做这种题感觉很有压力,思路还是有点混乱,总是wa,改了好多次才ac的思路:把箱子的移动当做第一层bfs,队列节点要用到当前箱子坐标(x,y),走的次数step,当前人的weizhi(man_x,man_y),要判断人能否将箱子推到某点时要嵌套第二层bfs(人的移动);代码如下:

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

uva 10055 uva 10071 uva 10300(水题两三道)

情歌两三首,水题两三道。 好久没敲代码了为暑假大作战热热身。 uva 10055 Hashmat the Brave Warrior 求俩数相减。 两个debug的地方,一个是longlong,一个是输入顺序。 代码: #include<stdio.h>int main(){long long a, b;//debugwhile(scanf("%lld%lld", &

hdu 2093 考试排名(sscanf)

模拟题。 直接从教程里拉解析。 因为表格里的数据格式不统一。有时候有"()",有时候又没有。而它也不会给我们提示。 这种情况下,就只能它它们统一看作字符串来处理了。现在就请出我们的主角sscanf()! sscanf 语法: #include int sscanf( const char *buffer, const char *format, ... ); 函数sscanf()和

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

poj 1511 Invitation Cards(spfa最短路)

题意是给你点与点之间的距离,求来回到点1的最短路中的边权和。 因为边很大,不能用原来的dijkstra什么的,所以用spfa来做。并且注意要用long long int 来存储。 稍微改了一下学长的模板。 stack stl 实现代码: #include<stdio.h>#include<stack>using namespace std;const int M

poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)

poj 3259: 题意:John的农场里n块地,m条路连接两块地,w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。 任务是求你会不会在从某块地出发后又回来,看到了离开之前的自己。 判断树中是否存在负权回路就ok了。 bellman代码: #include<stdio.h>const int MaxN = 501;//农场数const int