地图扫描
来源:互联网 发布:属下知罪by 生子番外 编辑:程序博客网 时间:2024/06/05 23:49
扫描统计 是程序设计拓展求和的一个基本课题。
有一条封闭曲线划定的地图,界定曲线上的点用“1”表示,曲线内外的点用“0”表示(具体数据由内外的的文件提供)。
试实施图形点扫描,统计地图的面积(即“封闭”曲线内的“0”点数)。
1.说明:
要统计用“1”标识的封闭曲线内“0”点的点数,关键在于识别哪些“0”点在封闭曲线内,哪些“0”在封闭曲线外。
试对封闭曲线外的“0”点实施“扩散传染”处理,例如处理成“2”点,以与曲线内的“0”点相区别。考虑到连续曲线可能复杂的弯曲变化,用简单一次枚举检测难以区分曲线内与外的“0”,可以把曲线外的“0”通过多次“扩散传染”逐个变为“2”,因为封闭曲线隔离使得曲线内的“0”保持不变。
——————————
(1)、四周边上的“0”无疑在曲线外,变为“2”;
(2)、凡与“2”相邻的“0”点通过“扩散传染”变为“2”,即判断每一个“0”点,若它的上下左右元素中有某一个为“2”点,即被扩散传染为“2”;
(3)、约定扫描x*y(即图中点的个数)次,设置变量w,每次扫描前w=0;凡有扩散传染发生,w=1。每次扫描后检验,如果w=0,表示该次扫描没有传染发生,即停止;
(4)统计“0”的点数即为所求封闭曲线的面积。
2.程序设计:
#include<stdio.h>int main(){ FILE *fp; char fname[50]; /*文件名长度在此约定不大于50,包含扩展名*/ int i,j,x,y,k,s,w,t,a[12][12]; printf("\n input file name: "); gets(fname); if((fp==fopen(fname,"r")==NULL)) { printf("The file was not opend\n"); } x=11;y=11; for(i=0;i<=y;++i) { printf("\n "); for(j=0;j<=x;++j) { fscanf(fp,"%d",&a[i][j]);/*从文件读数据到二维a数组*/ printf("%d",a[i][j]); } } for(i=0;i<=x;++i) { if(a[0][i]==0) a[0][i]=2; /*把边上0转化为2*/ if(a[y][i]==0) a[y][i]=2; } for(i=1;i<y;++i) { if(a[i][0]==0) a[i][0]=2; if(a[i][x]==0) a[i][x]=2; } t=x*y; for(k=1;k<t;++k) { w=0; for(i=1;i<y;++i) for(j=1;j<x;++j) if((a[i][j-1]==2||a[i][j+1]==2||a[i-1][j]==2||a[i+1][j]==2)&&a[i][j]==0) { a[i][j]=2;/*若0的上下左右之一为2,则0转化为2*/ w=1; } if(w==0) break; } s=0; printf("\n"); for(i=0;i<=y;++i) { printf("\n "); for(j=0;j<=x;++j) { if(a[i][j]==0) s+=1; /*统计曲线内的“0”点数*/ printf("%d",a[i][j]); /*输出处理后的地图*/ } } printf("\n s=%d\n",s); fclose(fp);}
3.程序运行示例及其注意事项:
运行程序,读入数据表 dt191.txt 中的数据,统计如图所示;
地图原始数据 input file name: dt191.txt 0 0 0 1 0 0 0 1 0 1 1 0 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 1 0 0 0 1 0 1 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 处理统计结果 2 2 2 1 2 2 2 1 2 1 1 2 2 1 1 0 1 2 1 0 1 0 0 1 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 2 2 2 1 0 0 0 1 0 0 0 0 1 2 1 0 0 0 1 2 1 1 0 0 0 1 2 1 0 1 2 2 2 1 0 0 1 2 2 1 0 1 2 2 1 0 0 1 2 2 1 0 0 0 1 2 2 1 0 0 1 2 2 1 0 0 0 1 2 2 1 0 0 1 2 2 1 0 0 1 2 2 1 0 1 2 2 2 2 1 1 2 2 2 2 1 2 2 s=52
注意:通过数据文件也是向程序提供数据的方式之一,尤其是面对大批量的数据,从文件输入要比逐个从键盘输入简单得多。
1 0
- 地图扫描
- 百度地图 和 ZXING 扫描冲突问题
- 集成百度地图SDK,百度定位SDK,二维码扫描
- 扫描
- 扫描
- iOS与phonegap整合 实现百度地图定位和二维码扫描
- 地图
- 地图
- 地图
- 地图
- 地图
- 地图
- 地图
- 地图
- 地图
- 地图
- 地图
- 地图
- shell expect 异常记录
- Android界面性能调优手册
- 实验4:Android数据存储和访问-书籍的增删改查
- R语言实战笔记--第三章 图形初阶
- lua基本知识点1
- 地图扫描
- 闲扯Linux的学习
- Java设计模式——单例
- SSL_1125_集合_HASH
- Git使用总结(含Git Bash与Git GUI的使用)
- keywords in my life
- JAVA反射(一):获取Class对象的三种方式及其区别
- 【51nod】1049 最大子段和
- 锅打灰太狼