• 炸弹人(广搜)


      首先用广度优先搜索来枚举出所有小人能够到达的点,并计算出每个点能够消灭的敌人的数量。如果下一个点能够消灭的敌人数量大于前一个,那么更新消灭敌人数量的最大值,并更新坐标点。下面是代码。

    #include<stdio.h>
    #include<queue>
    #include<string.h>

    using namespace std;

    struct A{
    int x,y;
    };

    int Next[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
    int book[20][20],n,m,Max,mx,my;
    char Map[20][20];

    void getnum(int i, int j)
    {
    int sum=0,x,y;
    x = i, y = j;
    while(Map[x][y] != '#'){
    if(Map[x][y] == 'G')
    sum++;
    x--;
    }
    x = i, y = j;
    while(Map[x][y] != '#'){
    if(Map[x][y] == 'G')
    sum++;
    x++;
    }
    x = i, y = j;
    while(Map[x][y] != '#'){
    if(Map[x][y] == 'G')
    sum++;
    y--;
    }
    x = i, y = j;
    while(Map[x][y] != '#'){
    if(Map[x][y] == 'G')
    sum++;
    y++;
    }
    if(sum > Max){
    Max = sum;
    mx = i;
    my = j;
    }
    }

    void bfs(A head)
    {
    A h,t;
    int i,tx,ty;
    queue<A> q;
    getnum(head.x,head.y);
    q.push(head);
    book[head.x][head.y] = 1;
    while(!q.empty()){
    h = q.front();
    q.pop();
    for(i = 0; i < 4; i++){
    tx = h.x + Next[i][0];
    ty = h.y + Next[i][1];
    if(tx < 0 || tx >= n || ty < 0 || ty >= m)
    continue;
    if(Map[tx][ty] == '.' && book[tx][ty] == 0){
    t.x = tx;
    t.y = ty;
    getnum(tx, ty);
    q.push(t);
    book[tx][ty] = 1;
    }
    if(tx == n-1 && ty == m-1)
    return ;
    }
    }
    }

    int main()
    {
    A h;
    int i,j;
    while(~scanf("%d%d%d%d",&n,&m,&h.x,&h.y)){
    memset(book,0,sizeof(book));
    Max = 0;
    mx = h.x;
    my = h.y;
    for(i = 0; i < n; i++)
    scanf("%s",Map[i]);
    bfs(h);
    printf("(%d, %d) %d ",mx,my,Max);
    }
    return 0;
    }

    /*输入样例:
    13 13 3 3
    #############
    #GG.GGG#GGG.#
    ###.#G#G#G#G#
    #.......#..G#
    #G#.###.#G#G#
    #GG.GGG.#.GG#
    #G#.#G#.#.#.#
    ##G...G.....#
    #G#.#G###.#G#
    #...G#GGG.GG#
    #G#.#G#G#.#G#
    #GG.GGG#G.GG#
    #############

    输出:(7,11)10

    */

  • 相关阅读:
    flask-admin章节二:wtforms的使用以及在数据库场景中使用QuerySelectField代替SelectField
    flask-admin章节一:使用chartkick画报表
    flask-admin众博客概述
    python smtplib发送邮件遇到的认证问题
    python logging模块可能会令人困惑的地方
    Markdown
    SpringBoot-启动过程
    SpringBoot-目录
    AbstractQueuedSynchronizer
    ThreadLocal
  • 原文地址:https://www.cnblogs.com/didideblog/p/6785795.html
Copyright © 2020-2023  润新知