uva12171(floodfill)

本文介绍了一种计算不规则三维物体体积和表面积的方法,通过离散化坐标系和洪水填充算法实现。该算法首先对物体边界进行离散化处理,然后使用递归方式计算内部空间,最终得到物体的体积和表面积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目连接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3323

抄的代码,,

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<algorithm>
  4 #include<queue>
  5 #include<cstdlib>
  6 #include<iostream>
  7 using namespace std;
  8 const int maxn=50+5;
  9 const int maxc=1000+10;
 10 int n,x0[maxn],x1[maxn],y0[maxn],y1[maxn],z0[maxn],z1[maxn];
 11 int nx,ny,nz;
 12 int xs[maxn<<1],ys[maxn<<1],zs[maxn<<1];
 13 const int dx[]={1,-1,0,0,0,0};
 14 const int dy[]={0,0,1,-1,0,0};
 15 const int dz[]={0,0,0,0,1,-1};
 16 int color[maxn<<1][maxn<<1][maxn<<1];
 17 struct CELL
 18 {
 19     int x,y,z;
 20     CELL(int x=0,int y=0,int z=0):x(x),y(y),z(z){}
 21     bool valid()const
 22     {
 23         return x>=0&&x<nx-1&&y>=0&&y<ny-1&&z>=0&&z<nz-1;
 24     }
 25     bool solid()const
 26     {
 27         return color[x][y][z]==1;
 28     }
 29     bool getvis()const
 30     {
 31         return color[x][y][z]==2;
 32     }
 33     void setvis() const
 34     {
 35         color[x][y][z]=2;
 36     }
 37     CELL neighbor(int dir) const
 38     {
 39         return CELL(x+dx[dir],y+dy[dir],z+dz[dir]);
 40     }
 41     int volume() const
 42     {
 43         return (xs[x+1]-xs[x])*(ys[y+1]-ys[y])*(zs[z+1]-zs[z]);
 44     }
 45     int area(int dir) const
 46     {
 47         if(dx[dir]!=0) return (ys[y+1]-ys[y])*(zs[z+1]-zs[z]);
 48         else if(dy[dir]!=0) return (zs[z+1]-zs[z])*(xs[x+1]-xs[x]);
 49         else if(dz[dir]!=0) return (xs[x+1]-xs[x])*(ys[y+1]-ys[y]);
 50     }
 51 
 52 };
 53 void discretize(int *x,int &n)
 54 {
 55     sort(x,x+n);
 56     n=unique(x,x+n)-x;
 57 }
 58 int ID(int *x,int n,int x0)
 59 {
 60     return lower_bound(x,x+n,x0)-x;
 61 }
 62 void floodfill(int &v,int &s)
 63 {
 64     v=0;s=0;
 65     CELL c;
 66     c.setvis();
 67     queue<CELL>q;
 68     q.push(c);
 69     while(!q.empty())
 70     {
 71         CELL c=q.front();
 72         q.pop();
 73         v+=c.volume();
 74         for(int i=0;i<6;i++)
 75         {
 76             CELL c2=c.neighbor(i);
 77             if(!c2.valid()) continue;
 78             if(c2.solid()) s+=c.area(i);
 79             else if(!c2.getvis())
 80             {
 81                 c2.setvis();
 82                 q.push(c2);
 83             }
 84         }
 85     }
 86     v=maxc*maxc*maxc-v;
 87 }
 88 int main()
 89 {
 90     int kase=0;
 91     scanf("%d",&kase);
 92     while(kase--)
 93     {
 94         nx=ny=nz=2;
 95         xs[0]=ys[0]=zs[0]=0;
 96         xs[1]=ys[1]=zs[1]=maxc;
 97         scanf("%d",&n);
 98         for(int i=0;i<n;i++)
 99         {
100             scanf("%d%d%d%d%d%d",&x0[i],&y0[i],&z0[i],&x1[i],&y1[i],&z1[i]);
101             x1[i]+=x0[i];y1[i]+=y0[i];z1[i]+=z0[i];
102             xs[nx++]=x0[i];xs[nx++]=x1[i];
103             ys[ny++]=y0[i];ys[ny++]=y1[i];
104             zs[nz++]=z0[i];zs[nz++]=z1[i];
105         }
106         discretize(xs,nx);
107         discretize(ys,ny);
108         discretize(zs,nz);
109 
110         memset(color,0,sizeof(color));
111         for(int i=0;i<n;i++)
112         {
113             int X1=ID(xs,nx,x0[i]);int X2=ID(xs,nx,x1[i]);
114             int Y1=ID(ys,ny,y0[i]);int Y2=ID(ys,ny,y1[i]);
115             int Z1=ID(zs,nz,z0[i]);int Z2=ID(zs,nz,z1[i]);
116             for(int X=X1;X<X2;X++)
117                 for(int Y=Y1;Y<Y2;Y++)
118                     for(int Z=Z1;Z<Z2;Z++)
119                     color[X][Y][Z]=1;
120         }
121         int v,s;
122         floodfill(v,s);
123         printf("%d %d\n",s,v);
124     }
125     return 0;
126 
127 
128 }

 

转载于:https://www.cnblogs.com/yijiull/p/6779236.html

内容概要:本文介绍了多种开发者工具及其对开发效率的提升作用。首先,介绍了两款集成开发环境(IDE):IntelliJ IDEA 以其智能代码补全、强大的调试工具和项目管理功能适用于Java开发者;VS Code 则凭借轻量级和多种编程语言的插件支持成为前端开发者的常用工具。其次,提到了基于 GPT-4 的智能代码生成工具 Cursor,它通过对话式编程显著提高了开发效率。接着,阐述了版本控制系统 Git 的重要性,包括记录代码修改、分支管理和协作功能。然后,介绍了 Postman 作为 API 全生命周期管理工具,可创建、测试和文档化 API,缩短前后端联调时间。再者,提到 SonarQube 这款代码质量管理工具,能自动扫描代码并检测潜在的质量问题。还介绍了 Docker 容器化工具,通过定义应用的运行环境和依赖,确保环境一致性。最后,提及了线上诊断工具 Arthas 和性能调优工具 JProfiler,分别用于生产环境排障和性能优化。 适合人群:所有希望提高开发效率的程序员,尤其是有一定开发经验的软件工程师和技术团队。 使用场景及目标:①选择合适的 IDE 提升编码速度和代码质量;②利用 AI 编程助手加快开发进程;③通过 Git 实现高效的版本控制和团队协作;④使用 Postman 管理 API 的全生命周期;⑤借助 SonarQube 提高代码质量;⑥采用 Docker 实现环境一致性;⑦运用 Arthas 和 JProfiler 进行线上诊断和性能调优。 阅读建议:根据个人或团队的需求选择适合的工具,深入理解每种工具的功能特点,并在实际开发中不断实践和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值