您的位置:首页 > 其它

poj 3792 Area of Polycubes (简单模拟)

2014-04-03 20:39 204 查看
题目

题意:在三维坐标系中,给定n个立方体的中心坐标,立方体的边长为1,按照输入顺序,后来输入的必须和之前输入的立方体有公共的边。

而且,不能和之前输入的立方体相同。

如果满足条件,输出表面积。如果不满足,输出不符合条件的那一组。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;

struct node
{
int x, y, z;
}p[110], m;
int dx[10] = {0,0,0,0,1,-1};
int dy[10] = {0,1,0,-1,0,0};
int dz[10] = {1,0,-1,0,0,0};

int main()
{
int ca, t, i, j, n, flag, f, k;
int area;
scanf("%d", &t);
for(ca = 1; ca <= t; ca++)
{
f = 0;
scanf("%d", &n);
area = 6*n;

for(i = 1; i <= n; i++)
scanf("%d,%d,%d", &p[i].x, &p[i].y, &p[i].z);
for(i = 2; i <= n; i++)
{
flag = 0;
for(j = 1; j < i; j++)
{
if(p[i].x==p[j].x&&p[i].y==p[j].y&&p[i].z==p[j].z)
{
f = i;
break;
}
for(k = 0; k < 6; k++)
{
m.x = p[i].x + dx[k];
m.y = p[i].y + dy[k];
m.z = p[i].z + dz[k];
if(m.x==p[j].x&&m.y==p[j].y&&m.z==p[j].z)
{
flag = 1;
area -= 2;
}
}
}
if(flag==0)
f = i;
if(f)
break;
}
if(f==0)
printf("%d %d\n", ca, area);
else
printf("%d NO %d\n", ca, f);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: