问题描述:
解决方案:
#include <iostream>
#include <cstdio>
bool isSame(int edge[6][2])
{
int a,b;
int same = 0;
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++){
if(edge[0][i] == edge[1][j]){
same = edge[0][i];
break;
}
}
if(same == 0)
return false;
a = edge[0][0];
if(a == same)
a = edge[0][1];
b = edge[1][0];
if(b == same)
b = edge[1][1];
if((a == edge[2][0] && b == edge[2][1]) || (a == edge[2][1] && b == edge[2][0]))
return true;
return false;
}
int main()
{
int edge[6][2];
int a,b;
while(scanf("%d",&a) !=EOF){
scanf("%d",&b);
if(a > b){
edge[0][0] = b;
edge[0][1] = a;
}else{
edge[0][0] = a;
edge[0][1] = b;
}
int index = 1;
int count[6] = {0};
for(int i = 1;i < 6;i++)
{
scanf("%d %d",&a,&b);
if(a > b){
int c = a;
a = b;
b = c;
}
int j;
for(j = 0; j < index; j++)
if(edge[j][0] == a && edge[j][1] == b)
break;
if(j >= index)
{
edge[index][0] = a;
edge[index][1] = b;
index++;
}else{
count[j]++;
}
}
bool flag = false;
if(count[0] == 5 && edge[0][0] == edge[0][1]){
flag = true;
}
for(int i = 0; i < 2; i++)
if(count[i] == 3 && count[1 - i] == 1 && edge[1 - i][0] == edge[1 - i][1] && (edge[1 - i][0] == edge[i][0] || edge[1 - i][0] == edge[i][1]))
flag = true;
if((count[0] == 1 && count[1] == 1 && count[2] == 1 && index == 3 && isSame(edge))|| flag)
printf("POSSIBLE\n");
else
printf("IMPOSSIBLE\n");
}
return 0;
}
//核心思路:暴力求解