int ger time scrip follow stdio.h stack line
题目代号:HDU 1312
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 20820 Accepted Submission(s): 12673
题目大意:一个男子站在'.'上,他不能走到'#'上问他能走到的'.'的数量是多少。
解题思路:初始点 bfs 四个方向都遍历一次即可。
差点被自己气哭,第一次提交的时候忘记初始化数组,因为没有判断边界,直接导致 WA。
AC 代码:
- #include#include < string.h > #include#include#include#include#include#include#include#include#include using namespace std;#define pi acos( - 1.0)#define mem(a, b) memset(a, b, sizeof(a))#define FOR(i, a, n) for (int i = a; i <= n; ++i)#define For(i, n, a) for (int i = n; i >= a; --i)#define FO(i, a, n) for (int i = a; ii)#define Fo(i, n, a) for (int i = n; i > a; --i) typedef long long LL;
- typedef unsigned long long ULL;
- const int MAXM = 25;
- char a[MAXM][MAXM];
- int n,
- m,
- ans;
- int cx[] = { - 1,
- 1,
- 0,
- 0
- };
- int cy[] = {
- 0,
- 0,
- -1,
- 1
- };
- struct node {
- int x,
- y;
- };
- queueQ;
- void bfs() {
- while (!Q.empty()) {
- int x = Q.front().x;
- int y = Q.front().y;
- Q.pop();
- for (int i = 0; i < 4; i++) {
- int tx = x + cx[i];
- int ty = y + cy[i];
- if (a[tx][ty] == '.') {
- ans++;
- a[tx][ty] = '#';
- Q.push(node {
- tx,
- ty
- });
- }
- }
- }
- }
- int main() {
- //freopen("in.txt", "r", stdin);
- while (cin >> m >> n, n && m) {
- mem(a, 0);
- for (int i = 1; i <= n; i++) {
- cin >> a[i] + 1;
- for (int j = 1; j <= m; j++) {
- if (a[i][j] == '@') {
- Q.push(node {
- i,
- j
- });
- a[i][j] = '#';
- }
- }
- }
- ans = 1;
- bfs();
- cout < endl;
- }
- return 0;
- }
HDU 1312 Red and Black(bfs,dfs 均可,个人倾向 bfs)
来源: http://www.bubuko.com/infodetail-2230330.html