poj 3792 Area of Polycubes (简单模拟)

题目

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

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

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

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <cmath>
 6 #include <algorithm>
 7 using namespace std;
 8 
 9 struct node
10 {
11     int x, y, z;
12 }p[110], m;
13 int dx[10] = {0,0,0,0,1,-1};
14 int dy[10] = {0,1,0,-1,0,0};
15 int dz[10] = {1,0,-1,0,0,0};
16 
17 int main()
18 {
19     int ca, t, i, j, n, flag, f, k;
20     int area;
21     scanf("%d", &t);
22     for(ca = 1; ca <= t; ca++)
23     {
24         f = 0;
25         scanf("%d", &n);
26         area = 6*n;
27 
28         for(i = 1; i <= n; i++)
29             scanf("%d,%d,%d", &p[i].x, &p[i].y, &p[i].z);
30         for(i = 2; i <= n; i++)
31         {
32             flag = 0;
33             for(j = 1; j < i; j++)
34             {
35                 if(p[i].x==p[j].x&&p[i].y==p[j].y&&p[i].z==p[j].z)
36                 {
37                     f = i;
38                     break;
39                 }
40                 for(k = 0; k < 6; k++)
41                 {
42                     m.x = p[i].x + dx[k];
43                     m.y = p[i].y + dy[k];
44                     m.z = p[i].z + dz[k];
45                     if(m.x==p[j].x&&m.y==p[j].y&&m.z==p[j].z)
46                     {
47                         flag = 1;
48                         area -= 2;
49                     }
50                 }
51             }
52             if(flag==0)
53             f = i;
54             if(f)
55             break;
56         }
57         if(f==0)
58         printf("%d %d\n", ca, area);
59         else
60         printf("%d NO %d\n", ca, f);
61     }
62     return 0;
63 }

 

posted @ 2014-04-03 20:39  水门  阅读(186)  评论(0编辑  收藏  举报