// Problem#: 1048
// Submission#: 1829258
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include<vector>
#include<stdio.h>
#include<memory.h>
#include<queue>
using namespace std;
bool visited [512];
int rule[9] = {
432,504,216,438,511,219,54,63,27
};
struct node{
int state;
vector<int>steps;
};
int bfs(int start)
{
if( start == 0 )
{
printf("11\n");
return 1;
}
queue<node>mqueue;
memset(visited,0,sizeof(visited));
node tmp;
tmp.state = start;
visited[start] = 1;
mqueue.push(tmp);
while( !mqueue.empty() )
{
node tmp = mqueue.front();
mqueue.pop();
if( tmp.state == 0 )
{
for( int i = 0; i< tmp.steps.size() ; i++ )
{
printf("%d",tmp.steps[i]+1);
}
printf("\n");
break;
}
for( int i = 0; i<9 ; i++ )
{
int child_state = tmp.state^rule[i];
if( visited[child_state] == 0 )
{
visited[child_state] = 1;
node child_node = tmp;
child_node.state = child_state;
child_node.steps.push_back(i);
mqueue.push(child_node);
}
}
}
return 1;
}
int main(int argc, char *argv[])
{
int n;
scanf("%d\n",&n);
for(int i = 0 ; i<n;i++)
{
char state[10];
gets(state);
int sum = 0;
for( int j=0; j<9 ; j++ )
{
if( state[j] == 'b' )
{
sum = sum*2+1;
}
else
{
sum = sum*2;
}
}
bfs(sum);
}
return 0;
}
1048 Inverso
最新推荐文章于 2013-09-18 16:58:09 发布