hdu 3459 IDA*

来源:互联网 发布:gamestop it 编辑:程序博客网 时间:2024/06/06 18:38

IDA*   

AC代码如下:

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;char maps[10][10];int maxdeep;char ans[100];int get_h(){    int cnt = 0;    if( maps[2][0] != maps[3][0] || maps[2][7] != maps[3][7] )  cnt++;    if( maps[3][6] != maps[3][7] || maps[5][2] != maps[5][3] )  cnt++;    if( maps[4][2] != maps[5][2] || maps[3][0] != maps[3][1] )  cnt++;    return cnt;}bool check(){    if( !( maps[0][2] == maps[0][3] && maps[0][3] == maps[1][2] && maps[1][2] == maps[1][3] ) ) return false;    if( !( maps[2][2] == maps[2][3] && maps[2][3] == maps[3][2] && maps[3][2] == maps[3][3] ) ) return false;    if( !( maps[4][2] == maps[4][3] && maps[4][3] == maps[5][2] && maps[5][2] == maps[5][3] ) ) return false;    if( !( maps[2][0] == maps[2][1] && maps[2][1] == maps[3][0] && maps[3][0] == maps[3][1] ) ) return false;    if( !( maps[2][4] == maps[2][5] && maps[2][5] == maps[3][4] && maps[3][4] == maps[3][5] ) ) return false;    if( !( maps[2][6] == maps[2][7] && maps[2][7] == maps[3][6] && maps[3][6] == maps[3][7] ) ) return false;    return true;}void rotation_x(){    char temp1 = maps[5][3];    char temp2 = maps[4][3];    maps[5][3] = maps[3][3];    maps[4][3] = maps[2][3];    maps[3][3] = maps[1][3];    maps[2][3] = maps[0][3];    maps[1][3] = maps[2][6];    maps[0][3] = maps[3][6];    maps[2][6] = temp1;    maps[3][6] = temp2;    temp1 = maps[2][4];    maps[2][4] = maps[2][5];    maps[2][5] = maps[3][5];    maps[3][5] = maps[3][4];    maps[3][4] = temp1;}void rotation_y(){    char temp1 = maps[2][7];    char temp2 = maps[2][6];    for( int i = 7; i >= 3; i -= 2 ){        maps[2][i] = maps[2][i-2];        maps[2][i-1] = maps[2][i-3];    }    maps[2][1] = temp1;    maps[2][0] = temp2;    char temp = maps[1][2];    maps[1][2] = maps[0][2];    maps[0][2] = maps[0][3];    maps[0][3] = maps[1][3];    maps[1][3] = temp;}void rotation_z(){    char temp1 = maps[1][2];    char temp2 = maps[1][3];    maps[1][2] = maps[2][4];    maps[1][3] = maps[3][4];    maps[2][4] = maps[4][3];    maps[3][4] = maps[4][2];    maps[4][3] = maps[3][1];    maps[4][2] = maps[2][1];    maps[3][1] = temp1;    maps[2][1] = temp2;    char temp = maps[2][2];    maps[2][2] = maps[2][3];    maps[2][3] = maps[3][3];    maps[3][3] = maps[3][2];    maps[3][2] = temp;}void pf(){    cout << endl;    for( int i = 0; i < 6; i++ ){        for( int j = 0; j < 8; j++ ){            cout << maps[i][j];        }        cout << endl;    }    cout << endl;}bool DFS( int deep ){    if( deep + get_h() > maxdeep )  return false;    if( deep == maxdeep )   return check();    rotation_x();  //  pf();    ans[deep] = 'X';    if( DFS( deep + 1 ) )   return true;    rotation_x();rotation_x();rotation_x();    rotation_y();    ans[deep] = 'Y';    if( DFS( deep + 1 ) )   return true;    rotation_y();rotation_y();rotation_y();    rotation_z();    ans[deep] = 'Z';    if( DFS( deep + 1 ) )   return true;    rotation_z();rotation_z();rotation_z();    return false;}int main(){    while( 1 ){        for( int i = 0; i < 6; i++ ){            scanf( "%s", maps[i] );        }        if( maps[0][2] == '.' ){            break;        }        maxdeep = 0;        while( true ){            maxdeep++;            if( DFS( 0 ) ){                break;            }        }        for( int i = 0; i < maxdeep; i++ ){            cout << ans[i];        }        cout << endl;    }    return 0;}


0 0