传送门  http://acm.hit.edu.cn/hoj/problem/view?id=1797

总体的思路是遍历可以到达的' . ',将其对应的vis数组化为1,然后统计所有为1的vis项;

①常用的加边法,防止越界

②初始化,不然两次相同的输入得到的结果会不同,由于是二维数组,能力有限,只好在结尾初始化,为下次输入做准备

③结束条件,递归函数一定要先写好结束条件,不然会炸

④上下左右四向移动

⑤直接递归函数调用自身

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
char str[][];
char s[];
int vis[][];
int dx[]= {-,,,};
int dy[]= {,,,-};
int dfs(int x,int y)
{
int next_x,next_y,k;
if(str[x][y]=='#'||vis[x][y]||str[x][y]==) //③
return ;
vis[x][y]=;
for(k=; k<; k++) // ④
{
next_x=x+dx[k];
next_y=y+dy[k];
if(dfs(next_x,next_y)) // ⑤
return ;
}
return ;
}
int main()
{
int w,h,i,j,startx,starty,ans;
while(scanf("%d %d",&w,&h)!=EOF)
{
ans=;
if(w==&&h==)
break;
for(i=; i<=h; i++) // ①
{
scanf("%s",s);
for(j=; j<=w; j++)
{
str[i][j]=s[j-];
}
}
for(i=; i<=h; i++)
{
for(j=; j<=w; j++)
{
vis[i][j]=;
if(str[i][j]=='@')
{
startx=i;
starty=j;
break;
}
}
}
dfs(startx,starty);
for(i=;i<=h;i++)
{
for(j=;j<=w;j++)
{
//printf("%d ",vis[i][j]);
if(vis[i][j]==)
ans++;
}
//puts("");
}
for(i=;i<=h;i++) // ②
{
for(j=;j<=w;j++)
{
str[i][j]=;
vis[i][j]=;
}
}
printf("%d\n",ans);
}
return ;
}

HOJ 1797 Red and Black的更多相关文章

  1. HOJ题目分类

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

  2. 使用Red Gate Sql Data Compare 数据库同步工具进行SQL Server的两个数据库的数据比较、同步

    Sql Data Compare 是比较两个数据库的数据是否相同.生成同步sql的工具. 这一款工具由Red Gate公司出品,我们熟悉的.NET Reflector就是这个公司推出的,它的SQLTo ...

  3. 使用Red Gate Sql Compare 数据库同步工具进行SQL Server的两个数据库的结构比较、同步

    将测试版的项目同步(部署)到正式版的时候,两个数据库的结构比较与同步时,如果修改数据库的时候没有记录好修改了那些表,很难将两个数据库进行同步 RedGate Sql Compare使用简介说明: 1. ...

  4. 新年抢红包效果(New Year Red Packet)

    新年抢红包效果(New Year Red Packet) 晓娜的文章(微信公众号:migufe) 2016即将过去,我们将迎来新的一年2017,这里小编提前祝大家新年快乐!万事如意!那我们新年最开心的 ...

  5. KALI Linux problems & Study Red Hat | Ubuntu

    Problem When you ask some website with https head.you may met the problem  secure connection failed ...

  6. hoj 2662 经典状压dp // MyFirst 状压dp

    题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2662 1.引言:用dp解决一个问题的时候很重要的一环就是状态的表示,一般来说,一个数组即可保存状态. ...

  7. Red Gate(SQLToolbelt)SQL Server的安装与注册(破解)

    Red Gate(SQLToolbelt)是SQL Server辅佐工具 1.SQL Compare 比较和同步SQL Server数据库结构 2.SQL Data Compare 比较和同步SQL ...

  8. Red Hat Enterprise Server 6.0 安装Sendmail相关包

    由于需要在Linux服务器(Red Hat Enterprise Linux Server release 6.0)上配置邮件服务,需要安装Sendmail包,一般Sendmail的安装有两种方式:R ...

  9. Red Hat Enterprise Linux 6.6安装体验

    Red Hat Enterprise Linux 6.6的安装首界面有五个选项,这跟以前的Red Hat Enterprise Linux 5.x的安装界面是有一些区别的.   安装或者升级现有系统( ...

随机推荐

  1. Spring + Jedis集成Redis(集群redis数据库)

    前段时间说过单例redis数据库的方法,但是生成环境一般不会使用,基本上都是集群redis数据库,所以这里说说集群redis的代码. 1.pom.xml引入jar <!--Redis--> ...

  2. Navicat Premium连接Oracle 问题汇总

  3. Swift - 键盘弹起,遮挡输入框

    extension LoginViewController:UITextFieldDelegate { func textFieldShouldReturn(textField: UITextFiel ...

  4. xss漏洞修复,待完善

    1.防止sql注入 /// <summary> /// 分析用户请求是否正常 /// </summary> /// <param name="Str" ...

  5. llinux常用命令

    (1)Ctrl+alt+(1-6)可调用控制台程序 (2)date---可看时间日期 (3)date 月日时分年 ------可修改时间 (4)useradd-------新建用户 (5)passwd ...

  6. C 标准库系列之assert.h

    先简单介绍一下<assert.h>头文件,该头文件的目的便是提供一个宏assert的定义,即可以在程序必要的地方使用其进行断言处理:断言在程序中的作用是当在调试模式下时,若程序给出的前提条 ...

  7. 转:SqlServer2012自增列值突然增大1000的原因及解决方法

    原文链接:http://blog.csdn.net/phoenix36999/article/details/53304126 首先排除数据回滚及增加删除等操作. 按照这篇文章SQL Server 2 ...

  8. Win10 VS2015自动添加头注释

    /********************************************************************************** 作者: $username$** ...

  9. C语言语法 typedef小结

    在总结typedef之前,先了解一个专业术语: 常量指针(const pointer):常量指针在定义的时候必须被初始化,而且一旦初始化完成,则它的值就不能再改变. int errNumb = 0; ...

  10. 安装maven编译环境

    安装maven编译环境 1.默认已经装好yum并配置好yum源(推荐使用163yum源) 2.安装JDK 3.安装相关依赖环境(root用户登陆) yum install -y cmake lzo-d ...