Lacking counting POJ.NO 2386
来源:互联网 发布:微屏软件怎么样 编辑:程序博客网 时间:2024/06/03 22:14
/*有一个大小为N*M的园子,雨后积了水八连通的水被认为是联通在一起的请 求出院子里总共有多少水洼?#代表有水 .代表无水EG: ... .#. ... 只有当#周围全为. 才认定这是一个水洼N,M<=100解:就是深度遍历 在经过一个有@的点时深度遍历 并把此点标记或者更改 在主函数中完整的调用遍历的次数就是 水洼的个数*/# include <stdio.h># include <stdlib.h># include <time.h># define N 15# define M 30char 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}; //十二个月,二月暂定为28int 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否则为0month[1]+=flag; //二月+flagcharge[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);}
3 0
- Lacking counting POJ.NO 2386
- Lake Counting(POJ NO.2386)
- Lake Counting (POJ No.2386) DFS
- Lake Counting(DFS) POJ No.2386
- POJ NO.2386 Lake Counting(算水洼)
- POJ-lake counting-No.2386-DFS
- Lake Counting(POJ No。2386)
- POJ No.2386(Lake Counting)
- 《挑战程序设计竞赛》P32 题目:Lacking Couting POJ 2386 深搜
- 【挑战程序设计竞赛】之 lake counting(POJ No.2386)
- 深度搜索DFS-Lake Counting(POJ NO.2386)
- 深度搜索DFS-Lake Counting(POJ NO.2386)
- poj 2386 Lake Counting
- poj 2386 Lake Counting
- POJ 2386 Lake Counting
- poj 2386 Lake Counting
- poj 2386 Lake Counting
- poj 2386 Lake Counting
- 编一个程序,从它标准输入读取c源代码,并验证所有的花括号都是成对出现的
- node-webkit 使用简介开发桌面应用
- Android Studio 上传项目到Github并设置忽略文件
- openflow v1.0学习笔记
- 深度学习入门之从感知机开始
- Lacking counting POJ.NO 2386
- 如何实现 :双栈实现队列 双队列实现栈
- 答疑
- android UI注册登录界面
- C语言简介
- 自定义可以拖拽的Toast
- 项目小计之客户端框架简介
- centos中文目录换成英文目录
- e.printStackTrace()与System.out输出顺序混乱