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;}                                 

原创粉丝点击