找到立方体的相邻边

时间:2015-07-10 17:33:46

标签: java

我正在尝试查找有关查找多维数据集相邻边的在线问题。完整的问题位于http://www.codechef.com/JULY15/problems/CHCUBE。 它给了我正确的答案,但是当我提交它时会得到错误的答案。

继承我的java代码

 import java.util.*;

 class Cube {

     public static void main(String[] args)
         {
         long T;
         int blue = 0,black = 0,red=0,green=0,orange=0,yellow=0;

         Scanner input=new Scanner(System.in);
            T=input.nextLong();
            int pos=0,checked=0,answer=0;
         String colors[]=new String[6];
            while(T>0){

                for(int temp=0;temp<6;temp++)
                {
                colors[temp]=input.next();

                if(colors[temp].equals("blue"))
                {

                    blue++;
                    if(blue>2)
                        pos=temp;
                }
                else if(colors[temp].equals("black"))
                    {black++;
                    if(black>2)
                        pos=temp;
                    }
                else if(colors[temp].equals("yellow"))
                    {yellow++;
                    if(yellow>2)
                        pos=temp;
                    }
                else if(colors[temp].equals("orange"))
                    {orange++;
                    if(orange>2)
                        pos=temp;
                }
                else if(colors[temp].equals("green"))
                    {green++;
                    if(green>2)
                        pos=temp;
                }
                else if(colors[temp].equals("red"))
                    {red++;
                    if(red>2)
                        pos=temp;
                }
                }

                if(blue>2||black>2||green>2||yellow>2||red>2||orange>2)
                {       if(pos%2==0)
                    {
                        checked=(pos+2)%6;
                    }
                    else{


                        checked=(pos+1)%6;
                    }           


                    if(colors[pos].equals(colors[checked] )||colors[pos].equals(colors[(checked+1)%6]) )
                    {   
                                    if(colors[pos].equals(colors[(checked+3)%6]) ||colors[pos].equals(colors[(checked+2)%6]) )
                        {

                                            answer++;
                        }

                    }

                    }
                if(answer==1)
                    System.out.println("YES");
                else
                    System.out.println("NO");

                T--;
            }


         }



 }

1 个答案:

答案 0 :(得分:1)

我建议你将整个事物建模为图形。

在这种情况下,图表是一种非常灵活的数据结构 你也可以使用所有算法,因为问题的大小 真是太少了。

图表的节点是边,每个节点都必须有 表示其颜色的属性color

每个节点还有一个相邻边的列表(所以我们是 实现具有相邻列表的图形,而不是相邻矩阵)。

如果您已构建图形,则可以开始使用相同颜色计算相邻边。有许多不同的方法,我认为在你的情况下它可能是 很好地删除不同颜色的边之间的所有节点。

之后,您可以计算图表中剩余的所有边。 由于图是一个无向图,你必须划分 结果为2.

请注意,此方法不会导致巨大的主要方法 - 您可以更快地解决和调试问题。