这题其实和POJ的1979是同一道题,当时POJ使用cin写的,所以读入的时候,就很正确。

这次用scanf读入的时候,就出现了问题,我们在读完宽高之后,要用getchar吸收掉回车,然后每行末尾的回车也要用scanf吸收掉。

对于深搜函数的写法有多种,我在代码里面列了两种。

#include <cstdio>
#include <cstring>
int map[25][25];
int vis[25][25];
int sr, sc, ans, H, W;
int d[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; // void dfs(int r,int c)
// {
// ans++;
// map[r][c] = 0;
// for (int k = 0;k<4;k++) {
// int i = r + d[k][0];
// int j = c + d[k][1];
// if (i>=0&&j>=0&&i<H&&j<W&&map[i][j]) {
// dfs(i, j);
// }
// }
// } void dfs(int r,int c)
{
if (map[r][c])
ans++;
for (int i=0;i<4;i++) {
int row = r + d[i][1];
int col = c + d[i][0];
if (row>=0&&col>=0&&row<H&&col<W&&map[row][col]&&!vis[row][col]) {
vis[row][col] = 1;
dfs(row, col);
}
}
} int main()
{
char ch;
while (scanf("%d%d",&W,&H)&&W+H) {
getchar();
memset(map, 0, sizeof(map));
memset(vis, 0, sizeof(vis));
for (int i = 0; i < H;i++) {
for (int j = 0; j < W;j++) {
scanf("%c", &ch);
if (ch=='.')
map[i][j] = 1;
else if (ch=='@') {
sr = i;
sc = j;
map[i][j] = 1;
}
}
getchar();
}
// for (int i = 0; i < H;i++) {
// for (int j = 0; j < W;j++) {
// printf("%d", map[i][j]);
// }
// printf("\n");
// }
ans = 0;
vis[sr][sc] = 1;
dfs(sr,sc);
printf("%d\n", ans);
}
return 0;
}

HDU-1312-Black and Red的更多相关文章

  1. HDU 1312 Red and Black --- 入门搜索 BFS解法

    HDU 1312 题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象 ...

  2. HDU 1312 Red and Black --- 入门搜索 DFS解法

    HDU 1312 题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象 ...

  3. HDU 1312:Red and Black(DFS搜索)

      HDU 1312:Red and Black Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & ...

  4. HDU 1312 Red and Black(bfs,dfs均可,个人倾向bfs)

    题目代号:HDU 1312 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/100 ...

  5. HDU 1312 Red and Black (dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/1000 MS (Java/Oth ...

  6. HDU 1312 Red and Black(DFS,板子题,详解,零基础教你代码实现DFS)

    Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  7. HDU 1312 Red and Black(最简单也是最经典的搜索)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/1000 MS (Java/Oth ...

  8. HDU 1312 Red and Black(经典DFS)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 一道很经典的dfs,设置上下左右四个方向,读入时记下起点,然后跑dfs即可...最后答 ...

  9. HDU 1312 Red and Black (DFS & BFS)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 题目大意:有一间矩形房屋,地上铺了红.黑两种颜色的方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相 ...

  10. hdu 1312 Red and Black

    Problem Description There is a rectangular room, covered with square tiles. Each tile is colored eit ...

随机推荐

  1. B. Mancala (Codeforces Round #478 (Div. 2))

    #include <bits/stdc++.h> using namespace std; ; typedef long long ll; ll a[maxn]; ll b[maxn]; ...

  2. 前端开发 - Emmet使用手册

    Emmet (前身为 Zen Coding) 是一个能大幅度提高前端开发效率的一个工具: 基本上,大多数的文本编辑器都会允许你存储和重用一些代码块,我们称之为"片段".虽然片段能很 ...

  3. JDBC | 查询表数据行数

      两种方法: 1. "select * from userinfo" 利用ResultSet的last和getRow方法来获得ResultSet的总行数,适用于在查询数据的同时统 ...

  4. [題解](DP)CF713C_Sonya and Problem Wihtout a Legend

    對於不嚴格單調的我們可以n^2DP,首先每個數一定在原數組中出現過,如果沒出現過不如減小到出現過的那個花費更小,效果相同 所以f[i][j]表示把i改到離散化后j的最小代價,每次維護前一狀態最小值mn ...

  5. exec 和 eval

    exec exec语句用来执行储存在字符串或文件中的Python语句, 我们可以运行一个包含Python语句的字符串 >>> exec "print 'Hello Pyth ...

  6. HDU 1875(最小生成树)

    #include <iostream> #include <algorithm> #include <cstdio> #include <cmath> ...

  7. 《Python网络爬虫相关基础概念》

    爬虫介绍 引入 之前在授课过程中,好多同学都问过我这样的一个问题:为什么要学习爬虫,学习爬虫能够为我们以后的发展带来那些好处?其实学习爬虫的原因和为我们以后发展带来的好处都是显而易见的,无论是从实际的 ...

  8. Codeforces Round #542(Div. 2) A.Be Positive

    链接:https://codeforces.com/contest/1130/problem/A 题意: 给n个数,找出一个非0整数d,使所有n个数除以整数d后,数组中正数的数量>= n/2. ...

  9. dubbo-spring

    一.需求 某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址:创建两个服务模块进行测试 测试预期结果:订单服务web模块在A服务器,用户服务模块在B服务器,A可以远程调用B的功能. 二.工程 ...

  10. 使用em和rem替代px

    rem是指根元素的字体大小,默认情况下html的字体大小为:16px=1rem.而em是相对单位,是基于它的祖先元素计算的. 如果我们不指定html和body的字体大小,要得到12px的rem需要这样 ...