zoukankan      html  css  js  c++  java
  • 题解 P6194【苏联人】

    这就是一道纯模拟题,并且棋盘大小规定了为 (8 imes 8),数据小,还不用担心超时。

    我的大体思路就是:先用一个字符数组读入棋盘,然后进行扫描。用一个布尔数组记录当前位置能否被其他棋子攻击到,初始值为 false,当扫描过程中扫描到的字符为 BR,就按照规则(战场为将布尔数组的值改变。

    但有个坑点,主教和战车不能越过棋子,那么在当前位置有棋子后就停止赋值。

    具体思路结合代码注释食用更佳。

    #include<bits/stdc++.h>
    using namespace std;
    #define rg register
    char a[10][10];
    bool mp[10][10];
    int main()
    {
    	for(rg int i=1;i<=8;i++)
    	{
    		for(rg int j=1;j<=8;j++)
    		{
    			a[i][j]=getchar();  //getchar 更快! 
    		}
    		getchar();  //注意处理换行符。 
    	}
    	for(rg int i=1;i<=8;i++)  //扫描 
    	{
    		for(rg int j=1;j<=8;j++)
    		{
    			if(a[i][j]=='R')  //如果是战车。 
    			{
    				mp[i][j]=1;  //首先当前的位置肯定不能放了。 
    				for(int k=1;i+k<=8&&a[i+k][j]=='.';k++)  //四个循环就是东南西北方向(雾 
    					mp[i+k][j]=1;                        //并且要判断有没有棋子挡道。 
    				for(int k=1;i+k>=1&&a[i-k][j]=='.';k++)
    					mp[i-k][j]=1;
    				for(int k=1;j+k<=8&&a[i][j+k]=='.';k++)
    					mp[i][j+k]=1;
    				for(int k=1;j-k>=1&&a[i][j-k]=='.';k++)
    					mp[i][j-k]=1;
    			}
    			if(a[i][j]=='B')  //如果是主教。 
    			{
    				mp[i][j]=1;   //同理。 
    				for(int k=1;i+k<=8&&j+k<=8&&a[i+k][j+k]=='.';k++)  //对应四个斜的方向。 
    					mp[i+k][j+k]=1;
    				for(int k=1;i-k>=1&&j-k>=1&&a[i-k][j-k]=='.';k++)
    					mp[i-k][j-k]=1;
    				for(int k=1;i+k<=8&&j-k>=1&&a[i+k][j-k]=='.';k++)
    					mp[i+k][j-k]=1;
    				for(int k=1;i-k>=1&&j+k<=8&&a[i-k][j+k]=='.';k++)
    					mp[i-k][j+k]=1;
    			}
    		}
    	}
    	for(rg int i=1;i<=8;i++)  //输出。 
    	{
    		for(rg int j=1;j<=8;j++)
    		{
    			if(mp[i][j]==0)   //没有棋子能攻击到。 
    				putchar('1');  //输出 1,不用 cout还是因为 putchar 更快。 
    			else
    				putchar('0');
    		}
    		putchar('
    '); 
    	}
    	return 0;
    } 
    
  • 相关阅读:
    excel
    POJ 1149--PIGS
    A
    强大的sscanf
    hdu 5754 Life Winner Bo(威佐夫博弈)
    hdu 5723 Abandoned country(最小生成树,dfs)
    hdu 5734 Acperience
    The Monocycle,UVa 10047(状态记录广搜)
    Fire!(两次bfs)
    NP-Hard Problemd(二分图判定着色)
  • 原文地址:https://www.cnblogs.com/win10crz/p/12859789.html
Copyright © 2011-2022 走看看