我正在尝试查找有关查找多维数据集相邻边的在线问题。完整的问题位于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--;
}
}
}
答案 0 :(得分:1)
我建议你将整个事物建模为图形。
在这种情况下,图表是一种非常灵活的数据结构 你也可以使用所有算法,因为问题的大小 真是太少了。
图表的节点是边,每个节点都必须有
表示其颜色的属性color
。
每个节点还有一个相邻边的列表(所以我们是 实现具有相邻列表的图形,而不是相邻矩阵)。
如果您已构建图形,则可以开始使用相同颜色计算相邻边。有许多不同的方法,我认为在你的情况下它可能是 很好地删除不同颜色的边之间的所有节点。
之后,您可以计算图表中剩余的所有边。 由于图是一个无向图,你必须划分 结果为2.
请注意,此方法不会导致巨大的主要方法 - 您可以更快地解决和调试问题。