/*有一个大小为N*M的园子,雨后积了水
八连通的水被认为是联通在一起的
请 求出院子里总共有多少水洼?
#代表有水 .代表无水
EG:...     .#. ...    只有当#周围全为. 才认定这是一个水洼
N,M<=100
解:就是深度遍历 在经过一个有@的点时深度遍历
并把此点标记或者更改 在主函数中完整的调用遍历的次数就是 水洼的个数
*/
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
# define N 15
# define M 30
char TU[N][M],S[]={".#"};
void DFS(int X,int Y);
int main(){int i,j,SUM=0;srand(time(NULL));for(i=0;i<N;i++){for(j=0;j<M;j++){TU[i][j]=S[rand()%10>=6];  //为了降低#的比重 用了[rand()%10>=6]printf("%c",TU[i][j]);}printf("\n");}for(i=0;i<N;i++){for(j=0;j<M;j++)if(TU[i][j]=='#'){DFS(i,j);SUM++;}}printf("\n共有%d个水洼.",SUM);return 0;
}
void DFS(int X,int Y)
{int i,j,x,y;TU[X][Y]='.';//将其改为'.'这样就相当于做了标记for(i=-1;i<=1;i++)  //用i j 加上当前X Y的坐标 来表示(X,Y)周围的坐标for(j=-1;j<=1;j++){x=X+i;     //y=Y+j;      //x y用来保存移动的结果if(TU[x][y]=='#'&&x>=0&&x<N&&y>=0&&y<M)DFS(x,y);   //深度遍历}return;
}

附加小程序:

年月日转天数,天数转月日

相信大家对此都不陌生此程序只是增加了pai错功能:

代码虽少 五脏俱全:

用了循环输入年月日,共70行代码

# include <stdio.h>
# include <stdlib.h>
# include <string.h>
int main()
{
long a[4]={0,0,0,0},i,tianshu,yuetian=0;  //a[0]a[1]a[2]a[3]分别存放选择年月日,i为循环变量;tianshu记录天数,yuetian用于将天数转为月日
int choice=3,flag,pan=0;   //循环次数,暂时定为2,闰年时flag=1,平年时flag=0,pan用来决定用户输入的年月日区间
char zifu[][5]={"选择","年份","\0","天数"};   //月份的暂时先为\0 ,如果是天数就把xuan[0]复制给zifu[2];
char xuan[][5]={"天数","月份","\0\0\0\0"},lei[][3]={"平","闰"};                      //复制给zifu[2]的字符串
int month[]={31,28,31,30,31,30,31,31,30,31,30,31};  //十二个月,二月暂定为28
int charge [2][8]={{1,1,1,1,3,2016,365,0},{1,1,1,1,3,2016,12,0}};     //用户输入的年月日区间
do{
printf("1:year.day->year.month.day\n2:year.month.day->year.day\n3:exit\n");    //选择项
for(i=0;i<choice;i++)
{
do{
printf("请输入%s(%d--%d):\n",zifu[i],charge[pan][i],charge[pan][i+4]);//提示用户输入
scanf("%d",&a[i]);
while(getchar()!='\n');//清理缓冲区
if(a[i]>charge[pan][i+4]||a[i]<charge[pan][i])printf("输入有误,");
}while(a[i]>charge[pan][i+4]||a[i]<charge[pan][i]); //用户输入不在charge[][]区间时重新输入
if(i==0)                                    //当用户选择完毕时
{
if(a[0]==3)  break;
pan=a[0]==3?-3:a[0]-1;               //pan进行charge[?][]的判断
choice+=pan;             //改变循环次数 如果是0就跳出循环
strcat(zifu[2],xuan[pan]);          //复制xuan[pan]到zifu[2]
}
if(i==1)                                     //当年分输入完毕时
{
flag=!(a[1]%4&&a[1]%100)||!(a[1]%400)?1:0;   //如果年份是闰年flag =1否则为0
month[1]+=flag;                //二月+flag
charge[0][6]+=flag;           // 365+flag
}
if(i==2)
charge[1][7]=month[a[2]-1];          //当月份输入完毕时charge[1][8]改为month[a[2]-1]
}
if(a[0]==2)
{
printf("%04d年--<%s年>\n%02d月%02d日",a[1],lei[flag],a[2],a[3]);        //输出年月日
tianshu=a[3];                                     //求天数
for(i=0;i<a[2]-1;i++)
tianshu+=month[i];
printf("是第%d天\n",tianshu);              //输出天数
}
if(a[0]==1)
{
printf("%04d年--<%s年>\n第%d天",a[1],lei[flag],a[2]);            //和上面一样
for(i=0;i<12;i++)
{
charge[0][6]-=month[i];         //charge[0][6]已经在运行过程中改为365或366是总天数
if(charge[0][6]<a[2])           //当总天数<a[2]时跳出循环
break;
}
a[3]=a[2]-charge[0][6];                //剩余的天数就是 日 ,
a[2]=12-i;                             //求月
printf("是%02d月%d日\n",a[2],a[3]);    //输出
}
if(a[0]-3)
{
system("pause");
for(i=0;i<4;i++)
{
zifu[2][i]='\0';
a[i]=0;
}//将字符数组xuan[]复制到zifu[2]的清零
month[1]=28;charge[1][7]=0;charge[0][6]=365;choice=3;tianshu=0;
}
system("cls");}while(a[0]-3);
}

Lacking counting POJ.NO 2386相关推荐

  1. Lake Counting POJ - 2386

    Due to recent rains, water has pooled in various places in Farmer John's field, which is represented ...

  2. POJ No.2386【B007】

    [B007]Lake Counting[难度B]------------------------------------------ [Description] Due to recent rains ...

  3. 挑战程序设计竞赛——详解DFS及BFS

    挑战程序设计竞赛--详解DFS及BFS 一.学会要用到的stl函数,Stack.Quene.Pair 1.Stack(DFS隐式的用到,并与Queue对比记忆) 头文件==#include== sta ...

  4. DFS:深入优先搜索 POJ-2386 Lake Counting

    深度优先搜索是从最开始的状态出发,遍历所有可以到达的状态. 因此可以对所有的状态进行操作,或列举出所有的状态. Lake Counting POJ - 2386 Due to recent rains ...

  5. 《Lake Counting》院子积水问题

    Lack Counting 题目来自挑战<挑战程序设计竞赛>穷竭搜索(POJ No.2386) 题目 有一个大小为 N×M 的园子,雨后积起了水.八连通的积水被认为是连接在一起的.请求出 ...

  6. 深度优先搜索(DFS)与广度优先搜索(BFS)详解

    原文来自<挑战程序设计竞赛> 深度优先搜索(DFS)和宽度优先搜索(BFS)都是常见的搜索算法.在学习DFS和BFS之前,我们首先得知道递归函数的概念. 1. 递归函数 通俗地讲,一个函数 ...

  7. 《挑战程序设计竞赛(第2版)》习题册攻略

    本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...

  8. POJ 2386 Lake Counting

    链接:http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submis ...

  9. poj 2386 Lake Counting

    poj   2386   Lake Counting                           题目链接:http://poj.org/problem?id=2386 题目大意:数湖. 题目 ...

最新文章

  1. hive根据已有表创建新表_Hive基础之创建表
  2. nginx 配置简介
  3. 《Leadership and the One Minute Manager》读书笔记之一
  4. 用Maven构建Hadoop项目
  5. 音视频技术开发周刊 | 203
  6. Hibernate锁定模式– OPTIMISTIC_FORCE_INCREMENT锁定模式如何工作
  7. 【JS复习笔记】00 序
  8. 深度学习(01)-- 基础学习
  9. 源码解析——消息机制
  10. 服务器虚拟化十大因素
  11. 【Python-3.3】函数中的可变参数和关键字参数
  12. python类中函数_如何在Python类中使用模块函数
  13. VS中常用的环境变量
  14. 快解析助力服装企业实现ERP远程外网访问
  15. 苹果开发者账户申请完整流程
  16. speedoffice(Excel)如何隐藏网络线
  17. php new object delete,php – S3 DeleteObject – DeleteMarker始终返回空
  18. 国标28181:什么是SDP协议
  19. .NET MAUI 开发电子木鱼(上)
  20. 【Unity2d】带你制作一款类似于金山打字的小游戏

热门文章

  1. “PHP语言,是全世界最好用的编程语言!“
  2. 柳传志:联想发展过程中的三大突破
  3. V 神打算让以太坊联姻 BCH 匿名币颤抖吗?
  4. 体检先锋_家居健康小秘笈
  5. vim中复制整个别的文件内容
  6. linux系统不能用投影仪,Linux连接投影仪(ubuntu)失败或显示不正常--未测试
  7. postman的批量传送数据和接口关联
  8. 源自神话的写作要义之英雄
  9. 4.STM32下载不进程序、程序不运行的可能原因
  10. linux 根据文件路径自动创建文件夹