zoukankan      html  css  js  c++  java
  • 蓝桥杯 打印十字图

    传送门:http://lx.lanqiao.cn/problem.page?gpid=T25

     

    解题思路:

    可以看出图像是一层层的扩展,可以用广搜扩展,然后用二维数组保存图案一下就行了。

    实现代码:

     1 #include <iostream>
     2 #include <cstring>
     3 #include <queue>
     4 using namespace std;
     5 
     6 const int MAXN=200;
     7 
     8 char map[MAXN][MAXN];
     9 
    10 struct node{
    11     int x,y;
    12     node(int x,int y):x(x),y(y){};
    13 };
    14 
    15 int dx[]={1,-1,0,0,1,-1,1,-1};
    16 int dy[]={0,0,-1,1,1,-1,-1,1};
    17 void init(){
    18     queue<node>q;
    19     int cx=MAXN/2;
    20     int cy=MAXN/2;
    21     memset(map,0,sizeof(map));
    22 
    23     map[cx][cy]='$';
    24     q.push(node(cx,cy));
    25 
    26     map[cx+1][cy]='$';
    27     q.push(node(cx+1,cy));
    28     map[cx+2][cy]='$';
    29     q.push(node(cx+2,cy));
    30       map[cx-1][cy]='$';
    31     q.push(node(cx-1,cy));
    32     map[cx-2][cy]='$';
    33     q.push(node(cx-2,cy));
    34 
    35     map[cx][cy+1]='$';
    36     q.push(node(cx,cy+1));
    37     map[cx][cy+2]='$';
    38     q.push(node(cx,cy+2));
    39       map[cx][cy-1]='$';
    40     q.push(node(cx,cy-1));
    41     map[cx][cy-2]='$';
    42     q.push(node(cx,cy-2));
    43 
    44     while(!q.empty()){
    45         node fr=q.front();
    46         q.pop();
    47 
    48         int x=fr.x;
    49         int y=fr.y;
    50 
    51         for(int i=0;i<8;i++){
    52             int tx=x+dx[i];
    53             int ty=y+dy[i];
    54 
    55             if(tx<0||tx>=MAXN||ty<0||ty>=MAXN)
    56                 continue;
    57 
    58             if(map[tx][ty]=='$'||map[tx][ty]=='.')
    59                 continue;
    60 
    61             q.push(node(tx,ty));
    62             if(map[x][y]=='$'){
    63                 map[tx][ty]='.';
    64             }else{
    65                 map[tx][ty]='$';
    66             }
    67         }
    68     }
    69 
    70 }
    71 
    72 int main(){
    73     init();
    74     int st=MAXN/2-2;
    75     int ed=MAXN/2+2;
    76     int n;scanf("%d",&n);
    77     st-=n*2;
    78     ed+=n*2;
    79     map[st][st]=map[st][ed]=map[ed][st]=map[ed][ed]='.';
    80     for(int i=st;i<=ed;i++){
    81         for(int j=st;j<=ed;j++)
    82             cout<<map[i][j];
    83         cout<<endl;
    84     }
    85 
    86 
    87 }
  • 相关阅读:
    POJ 1830 开关问题
    UESTC 1558 Charitable Exchange
    UESTC 1546 Bracket Sequence
    POJ 2847 Widget Factory
    java实现自动登录,并获取数据
    学习JAVA浮点数必看文章!
    Linux cron 配置样例
    Red Hat 安装 Tomcat
    在RedHat Enterprise Linux 5下安装JDK
    使用seconds_behind_master和mkheartbeat 检查MySQL数据库主从延时
  • 原文地址:https://www.cnblogs.com/IKnowYou0/p/6659434.html
Copyright © 2011-2022 走看看