1048 Inverso
来源:互联网 发布:英语美文软件下载 编辑:程序博客网 时间:2024/05/22 10:40
// 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;}