六个方向搜索。。。。
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
struct node
{
char fa[6];
int nfa[6];
};
queue <node> q;
bool vis[3][3][3][3][3][3];
bool pd(node x,char *s2)
{
for(int i = 0; i < 6; i++)
{
if(x.fa[i] != s2[i])
return false;
}
return true;
}
void bfs(char *s1,char *s2)
{
memset(vis,false,sizeof(vis));
while(!q.empty())
q.pop();
node t,f;
for(int i = 0; i < 6; i++)
{
t.fa[i] = s1[i];
if(t.fa[i] == 'r')
t.nfa[i] = 0;
else if(t.fa[i] == 'g')
t.nfa[i] = 1;
else if(t.fa[i] == 'b')
t.nfa[i] = 2;
}
vis[t.nfa[0]][t.nfa[1]][t.nfa[2]][t.nfa[3]][t.nfa[4]][t.nfa[5]] = true;
q.push(t);
while(!q.empty())
{
t = q.front();
q.pop();
if(pd(t,s2))
{
printf("TRUE\n");
return ;
}
//up
f.fa[0] = t.fa[1];
f.nfa[0] = t.nfa[1];
f.fa[1] = t.fa[5];
f.nfa[1] = t.nfa[5];
f.fa[2] = t.fa[2];
f.nfa[2] = t.nfa[2];
f.fa[3] = t.fa[3];
f.nfa[3] = t.nfa[3];
f.fa[4] = t.fa[0];
f.nfa[4] = t.nfa[0];
f.fa[5] = t.fa[4];
f.nfa[5] = t.nfa[4];
if(!vis[f.nfa[0]][f.nfa[1]][f.nfa[2]][f.nfa[3]][f.nfa[4]][f.nfa[5]])
{
q.push(f);
vis[f.nfa[0]][f.nfa[1]][f.nfa[2]][f.nfa[3]][f.nfa[4]][f.nfa[5]] = true;
}
//right
f.fa[0] = t.fa[2];
f.nfa[0] = t.nfa[2];
f.fa[1] = t.fa[1];
f.nfa[1] = t.nfa[1];
f.fa[2] = t.fa[5];
f.nfa[2] = t.nfa[5];
f.fa[3] = t.fa[0];
f.nfa[3] = t.nfa[0];
f.fa[4] = t.fa[4];
f.nfa[4] = t.nfa[4];
f.fa[5] = t.fa[3];
f.nfa[5] = t.nfa[3];
if(!vis[f.nfa[0]][f.nfa[1]][f.nfa[2]][f.nfa[3]][f.nfa[4]][f.nfa[5]])
{
q.push(f);
vis[f.nfa[0]][f.nfa[1]][f.nfa[2]][f.nfa[3]][f.nfa[4]][f.nfa[5]] = true;
}
//down
f.fa[0] = t.fa[4];
f.nfa[0] = t.nfa[4];
f.fa[1] = t.fa[0];
f.nfa[1] = t.nfa[0];
f.fa[2] = t.fa[2];
f.nfa[2] = t.nfa[2];
f.fa[3] = t.fa[3];
f.nfa[3] = t.nfa[3];
f.fa[4] = t.fa[5];
f.nfa[4] = t.nfa[5];
f.fa[5] = t.fa[1];
f.nfa[5] = t.nfa[1];
if(!vis[f.nfa[0]][f.nfa[1]][f.nfa[2]][f.nfa[3]][f.nfa[4]][f.nfa[5]])
{
q.push(f);
vis[f.nfa[0]][f.nfa[1]][f.nfa[2]][f.nfa[3]][f.nfa[4]][f.nfa[5]] = true;
}
//left
f.fa[0] = t.fa[3];
f.nfa[0] = t.nfa[3];
f.fa[1] = t.fa[1];
f.nfa[1] = t.nfa[1];
f.fa[2] = t.fa[0];
f.nfa[2] = t.nfa[0];
f.fa[3] = t.fa[5];
f.nfa[3] = t.nfa[5];
f.fa[4] = t.fa[4];
f.nfa[4] = t.nfa[4];
f.fa[5] = t.fa[2];
f.nfa[5] = t.nfa[2];
if(!vis[f.nfa[0]][f.nfa[1]][f.nfa[2]][f.nfa[3]][f.nfa[4]][f.nfa[5]])
{
q.push(f);
vis[f.nfa[0]][f.nfa[1]][f.nfa[2]][f.nfa[3]][f.nfa[4]][f.nfa[5]] = true;
}
}
printf("FALSE\n");
}
int main()
{
char s[13];
char s1[7],s2[7];
while(~scanf("%s",s))
{
for(int i = 0; i < 12; i++)
{
if(i < 6)
s1[i] = s[i];
else
s2[i - 6] = s[i];
}
s1[6] = '\0';
s2[6] = '\0';
bfs(s1,s2);
}
return 0;
}