• UVa 10196


    版权声明:本文为博主原创文章,未经博主同意不得转载。

    https://blog.csdn.net/mobius_strip/article/details/28750619

    题目:国际象棋,推断当前状态,哪一方被将军了。

    不会有同一时候被将军的情况。

    分析:模拟。直接依照国际象棋的规则模拟就可以。

                把操作分成两种。单点推断和射线推断,写成函数降低公共代码,也降低错误率;

                然后:兵、马、王(不用推断)都是单点推断。后、车、象都是射线推断。

                每种情况。调用不同的方向向量就可以。

    说明:没有同一时候成立的情况。注意细节别写错就好了;还有最后那组别输出了。

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    
    using namespace std;
    
    char maps[8][9];
    int  dxy[16][2] = {1,1,1,-1,-1,1,-1,-1, 1,0,0,1,-1,0,0,-1,
                       1,2,1,-2,-1,2,-1,-2, 2,1,2,-1,-2,1,-2,-1};
    
    int inmap( int x, int y )
    {
    	return (x>=0&&x<8)&&(y>=0&&y<8);
    }
    
    //单点推断 
    int PKN( int x, int y, char a, int s, int e )
    {
    	for ( int i = s ; i < e ; ++ i )
    		if ( inmap( x+dxy[i][0], y+dxy[i][1] ) )
    		if ( maps[x+dxy[i][0]][y+dxy[i][1]] == a )
    			return 1;
    	return 0;
    }
    
    //兵 
    int Pawn_nahmen( int x, int y, char a )
    {
    	if ( maps[x][y] == 'p' ) return PKN( x, y, 'K', 0, 2 );
    	if ( maps[x][y] == 'P' ) return PKN( x, y, 'k', 2, 4 );
    }
    
    //马 
    int Knight_nahmen( int x, int y, char a )
    {
    	return PKN( x, y, a, 8, 16 );
    }
    
    //循环推断 
    int RBQ( int x, int y, char a, int s, int e )
    {
    	for ( int i = s ; i < e ; ++ i ) {
    		int xx = x+dxy[i][0];
    		int yy = y+dxy[i][1];
    		while ( inmap( xx, yy ) ) {
    			if ( maps[xx][yy] == a ) return 1;
    			if ( maps[xx][yy] != '.' ) break;
    			xx += dxy[i][0];
    			yy += dxy[i][1];
    		}
    	}
    	return 0;
    }
    
    //车 
    int Rook_nahmen( int x, int y, char a )
    {
    	return RBQ( x, y, a, 4, 8 );
    }
    
    //象 
    int Bishop_nahmen( int x, int y, char a )
    {
    	return RBQ( x, y, a, 0, 4 );
    }
    
    //后 
    int Queen_nahmen( int x, int y, char a )
    {
    	
    	return RBQ( x, y, a, 0, 8 );
    }
    
    void Deal()
    {
    	for ( int i = 0 ; i < 8 ; ++ i )
    	for ( int j = 0 ; j < 8 ; ++ j ) {
    		int flag = 0;
    		switch ( maps[i][j] ) {
    			case 'p': if ( Pawn_nahmen( i, j, 'K' ) ) flag = 1;break;
    			case 'P': if ( Pawn_nahmen( i, j, 'k' ) ) flag = -1;break;
    			case 'r': if ( Rook_nahmen( i, j, 'K' ) ) flag = 1;break;
    			case 'R': if ( Rook_nahmen( i, j, 'k' ) ) flag = -1;break;
    			case 'b': if ( Bishop_nahmen( i, j, 'K' ) ) flag = 1;break;
    			case 'B': if ( Bishop_nahmen( i, j, 'k' ) ) flag = -1;break;
    			case 'q': if ( Queen_nahmen( i, j, 'K' ) ) flag = 1;break;
    			case 'Q': if ( Queen_nahmen( i, j, 'k' ) ) flag = -1;break;
    			case 'n': if ( Knight_nahmen( i, j, 'K' ) ) flag = 1;break;
    			case 'N': if ( Knight_nahmen( i, j, 'k' ) ) flag = -1;break;
    			default : break;
    		}
    		if ( flag ) {
    			if ( flag == 1 ) printf("white king is in check.
    ");
    			if ( flag == -1 ) printf("black king is in check.
    ");
    			return;
    		}
    	}
    	printf("no king is in check.
    ");
    	return;
    }
    
    int main()
    {
    	int cases = 1;
    	while ( 1 ) {
    		for ( int i = 0 ; i < 8 ; ++ i )
    		for ( int j = 0 ; j < 8 ; ++ j )
    			cin >> maps[i][j];
    		int count = 0;
    		for ( int i = 0 ; i < 8 ; ++ i )
    		for ( int j = 0 ; j < 8 ; ++ j )
    			count += (maps[i][j]=='.');
    		if ( count == 64 ) break;
    		
    		printf("Game #%d: ",cases ++);	
    		Deal();
    	}
    	
    	return 0;
    }
    
    測试数据:

    ........
    ...k....
    ....P...
    ........
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ..P.....
    ........
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ........
    ........
    ........
    ...R....
    .....K..
    ........
    
    ........
    ...k..R.
    ........
    ........
    ........
    ........
    .....K..
    ........
    
    ........
    R..k....
    ........
    ........
    ........
    ........
    .....K..
    ........
    
    ........
    ........
    ...R....
    ...k....
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ........
    .....B..
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ........
    .B......
    ........
    ........
    .....K..
    ........
    
    .....B..
    ........
    ...k....
    ........
    ........
    ........
    .....K..
    ........
    
    .B......
    ........
    ...k....
    ........
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ........
    ...p....
    ........
    ...R....
    .....K..
    ........
    
    ........
    ...k....
    ..r.....
    .B......
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ........
    ..N.....
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ...pp...
    ....N...
    ........
    ........
    .....K..
    ........
    
    ........
    ........
    ........
    ...k....
    ........
    ....p...
    .....K..
    ........
    
    ........
    ........
    ........
    ..pk....
    .N......
    ........
    .....K..
    ........
    
    ........
    ........
    ........
    ...k.q..
    .....N..
    ........
    .....K..
    ........
    
    ........
    ..N.....
    ........
    ...k....
    ........
    ........
    .....K..
    ........
    
    ........
    ....N...
    ........
    ...k....
    ........
    ........
    .....K..
    ........
    
    ........
    ........
    .....N..
    ...k....
    ........
    ........
    .....K..
    ........
    
    ........
    ........
    .N......
    ...k....
    ........
    ........
    .....K..
    ........
    
    ........
    q.......
    ........
    ...k....
    ........
    ....P...
    .....K..
    ........
    
    ........
    q.......
    ........
    ...k....
    ........
    ....P.p.
    .....K..
    ........
    
    .....r..
    ........
    ........
    ...k....
    ........
    ........
    .r...K..
    ........
    
    ........
    ........
    ........
    ...k....
    ........
    ........
    .....K..
    ...b....
    
    r......r
    ........
    ........
    ...k....
    ........
    ...n....
    .....K..
    ........
    
    K......k
    ........
    ........
    ........
    ........
    ........
    ........
    .......b
    
    K......k
    ........
    ..p.....
    ........
    ........
    ........
    ........
    .......b
    
    Kp.....k
    prn.....
    ..p.....
    ........
    ........
    ........
    ........
    .......b
    
    K..R...k
    ........
    ..p.....
    ........
    ........
    ........
    ........
    .......b
    
    K.pr...k
    b....q..
    ..p..nn.
    ........
    ..b.....
    ........
    ........
    bq.....b
    
    K..RB..k
    .....R.P
    ..p.....
    .......Q
    ........
    ........
    ........
    .......b
    
    ......B.
    ........
    ..p.....
    ........
    ..Kpk..r
    ........
    ........
    .......b
    
    ......P.
    ...K.k..
    ..p.....
    ........
    ........
    ........
    ........
    .......b
    
    ........
    ...K....
    pppppppp
    ..n.n...
    ........
    ........
    .k......
    .......b
    
    ........
    ...K....
    pppppppp
    ........
    ........
    ........
    k.......
    .......b
    
    ........
    ........
    ...k....
    ........
    .B.R....
    ........
    ........
    .K......
    
    ..k.....
    ppp.pppp
    ........
    .R...B..
    ........
    ........
    PPPPPPPP
    K.......
    
    rnbqk.nr
    ppp..ppp
    ....p...
    ...p....
    .bPP....
    .....N..
    PP..PPPP
    RNBQKB.R
    
    ........
    ...k....
    ....P...
    ........
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ..P.....
    ........
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ........
    ........
    ........
    ...R....
    .....K..
    ........
    
    ........
    ...k..R.
    ........
    ........
    ........
    ........
    .....K..
    ........
    
    ........
    R..k....
    ........
    ........
    ........
    ........
    .....K..
    ........
    
    ........
    ........
    ...R....
    ...k....
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ........
    .....B..
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ........
    .B......
    ........
    ........
    .....K..
    ........
    
    .....B..
    ........
    ...k....
    ........
    ........
    ........
    .....K..
    ........
    
    .B......
    ........
    ...k....
    ........
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ........
    ...p....
    ........
    ...R....
    .....K..
    ........
    
    ........
    ...k....
    ..r.....
    .B......
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ........
    ..N.....
    ........
    ........
    .....K..
    ........
    
    ........
    ...k....
    ...pp...
    ....N...
    ........
    ........
    .....K..
    ........
    
    ........
    ........
    ........
    ...k....
    ........
    ........
    .....K..
    ........
    
    ........
    ........
    ........
    ..pk....
    .N......
    ........
    .....K..
    ........
    
    ........
    ........
    ........
    ...k.q..
    .....N..
    ........
    .....K..
    ........
    
    ........
    ..N.....
    ........
    ...k....
    ........
    ........
    .....K..
    ........
    
    ........
    ....N...
    ........
    ...k....
    ........
    ........
    .....K..
    ........
    
    ........
    ........
    .....N..
    ...k....
    ........
    ........
    .....K..
    ........
    
    ........
    ........
    .N......
    ...k....
    ........
    ........
    .....K..
    ........
    
    ........
    q.......
    ........
    ...k....
    ........
    ....P...
    .....K..
    ........
    
    ........
    q.......
    ........
    ...k....
    ........
    ....P.p.
    .....K..
    ........
    
    .....r..
    ........
    ........
    ...k....
    ........
    ........
    .r...K..
    ........
    
    ........
    ........
    ........
    ...k....
    ........
    ........
    .....K..
    ...b....
    
    r......r
    ........
    ........
    ...k....
    ........
    ...n....
    .....K..
    ........
    
    ........
    ........
    ........
    ........
    ........
    ........
    ........
    ........

  • 相关阅读:
    solr jvm参数内存自动计算
    记一次使用Chrome修改useragent
    如何查看本机中已安装的.Net Framework版本
    经典实例 PetShop 4.0 For .NET 2.0 下载
    Web.Config配置节加密工具
    some command for Nokia IP 740
    JNCIP进阶OSPF MultiArea Configuration
    寒武纪
    Symantec AntiVirus Corporate Edition 10.0 Error: "Can't communicate with the Server Group..."
    心房客
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10692215.html
  • Copyright © 2020-2023  润新知