炸弹人

来源:互联网 发布:魔豆统计软件 编辑:程序博客网 时间:2024/05/16 19:22
#include<iostream>using namespace std;struct note{    int x;    int y;};char a[20][21];int getsum(int i,int j){    int sum,x,y;    sum=0;    x=i;    y=j;    while(a[x][y]!='#')    {        if(a[x][y]=='G')        {            sum++;        }        x--;    }    x=i;    y=j;    while(a[x][y]!='#')    {        if(a[x][y]=='G')        {            sum++;        }        x++;    }    x=i;    y=j;    while(a[x][y]!='#')    {        if(a[x][y]=='G')        {            sum++;        }        y--;    }    x=i;    y=j;    while(a[x][y]!='#')    {        if(a[x][y]=='G')        {            sum++;        }        y++;    }    return sum;}int main(){    note que[401];//假设地图大小不超过20*20,因此队列扩展不会超过400个    int head,tail;    int book[20][20]={0};//定义一个标记数组并全部初始化为0    int i,j,k,sum,max=0,mx,my,n,m,startx,starty,tx,ty;    int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};    cin>>n>>m>>startx>>starty;    //n表示有多少行字符,m表示每行有多少列    for(i=0;i<=n-1;i++)    {        cin>>a[i];    }    //队列初始化    head=1;    tail=1;    //往队列中插入小人的起始坐标    que[tail].x=startx;    que[tail].y=starty;    tail++;    book[startx][starty]=1;    max=getsum(startx,starty);    mx=startx;    my=starty;    //当队列不为空时循环    while(head<tail)    {        for(k=0;k<4;k++)        {            //枚举4个方向            tx=que[head].x+next[k][0];            ty=que[head].y+next[k][1];            //判断是否越界            if(tx<0||tx>n-1||ty<0||ty>m-1)            continue;            //判断是否为平地或者曾经走过            if(book[tx][ty]==0&&a[tx][ty]=='.')            {                //每个点只入队一次,所以需要标记这个点已经走过                book[tx][ty]=1;                //插入新扩展的点到队列中                que[tail].x=tx;                que[tail].y=ty;                tail++;                //统计当前新扩展的点可以消灭敌人的总数                sum=getsum(tx,ty);                //更新max值                if(sum>max)                {                    max=sum;                    mx=tx;                    my=ty;                }            }        }        head++;//注意这地方千万不要忘记,当一个点扩展结束后,必须要head++才能对后面的点进行扩展    }    cout<<"炸弹应该放置位置"<<mx<<","<<my<<"可以消灭的人数"<<max<<endl;   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##############*/

1 0
原创粉丝点击