poj 2993 Emag eht htiw Em Pleh

这个题是http://poj.org/problem?id=2996的反过来求的;这个题注意的就是建图;

View Code
#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<algorithm>

#include<cmath>

#include<queue>

#include<set>

#include<cstring>

#include<vector>

using namespace std;

void Get_map( char map[35][35] )

{

    map[2][2]=':';map[2][3]=':';map[2][4]=':';

    for( int i = 1 ; i <= 17 ; i ++ )

    {

       for( int j = 1 ; j <= 33 ; j ++ )

       {

               if( i%2==1 ) 

            {

                if( j %4 ==1 )

                map[i][j] = '+';

                else map[i][j] ='-'    ;    

            }

            else

            {

                if( j%4 ==1 ) map[i][j] = '|';

                else 

                  if( j<=4 ) 

                  {

                    if( map[i-2][j] ==':' ) map[i][j] ='.';

                    else map[i][j] = ':';

                  }

                    else if( map[i][j-4] ==':' ) map[i][j] ='.';

                         else map[i][j] = ':';    

            }         

       }

    }    

}

void Get_Black( char map[][35],char Black[] )

{

   int len = strlen( Black ),i=7;//printf( "afas" );

   while( i < len )

   {//printf( "sfas" );

        switch( Black[i] )

        {

           case 'K': map[(Black[i+2]-'0')*2][(Black[i+1]-'a')*4+3] = 'k';

                     i+=4; break;

           case 'Q': map[(Black[i+2]-'0')*2][(Black[i+1]-'a')*4+3] = 'q';

                     i+=4; break;

           case 'R': map[(Black[i+2]-'0')*2][(Black[i+1]-'a')*4+3] = 'r';

                     i+=4; break;

           case 'B': map[(Black[i+2]-'0')*2][(Black[i+1]-'a')*4+3] = 'b';

                     i+=4; break;

           case 'N': map[(Black[i+2]-'0')*2][(Black[i+1]-'a')*4+3] = 'n';

                     i+=4; break;

           default:map[(Black[i+1]-'0')*2][(Black[i]-'a')*4+3] = 'p';

                     i+=3; break;

                      

        }

                

   }    

}

void Get_White( char map[][35],char White[] )

{

   int len = strlen( White ),i=7;

   while( i < len )

   {

        switch( White[i] )

        {

           case 'K': map[(White[i+2]-'0')*2][(White[i+1]-'a')*4+3] = 'K';

                     i+=4; break;

           case 'Q': map[(White[i+2]-'0')*2][(White[i+1]-'a')*4+3] = 'Q';

                     i+=4; break;

           case 'R': map[(White[i+2]-'0')*2][(White[i+1]-'a')*4+3] = 'R';

                     i+=4; break;

           case 'B': map[(White[i+2]-'0')*2][(White[i+1]-'a')*4+3] = 'B';

                     i+=4; break;

           case 'N': map[(White[i+2]-'0')*2][(White[i+1]-'a')*4+3] = 'N';

                     i+=4; break;

           default:map[(White[i+1]-'0')*2][(White[i]-'a')*4+3] = 'P';

                     i+=3; break;

                      

        }        

   }    

}

int main(  )

{

    char map[35][35];

    char White[124],Black[124];

    while( gets(White) )

    {

        gets(Black);

        Get_map( map );

        Get_Black( map , Black );

        Get_White( map , White );

        for( int i = 17 ; i >= 1; i -- )

        {

           for( int j = 1 ; j <= 33 ; j ++ )

             printf( "%c",map[i][j] );

          puts( "" );

        }

    }

    //system( "pause" );

    return 0;

}

 

你可能感兴趣的:(poj)