炸弹人
来源:互联网 发布:魔豆统计软件 编辑:程序博客网 时间: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
- 炸弹人
- 炸弹人
- 炸弹人
- 【Java】炸弹人小游戏
- 搜索之“炸弹人”
- hdu 3529 炸弹人
- JAVA 炸弹人(一)
- JAVA 炸弹人(二)
- 再解炸弹人
- 炸弹人--枚举
- 炸弹人 游戏
- 3.2炸弹人
- 炸弹人 枚举
- 炸弹人:深搜
- java 制作炸弹人
- 炸弹人2
- 炸弹
- 炸弹
- 组个最小数
- C# 控制台程序Console.ReadKey的用法
- 通过代码写状态选择器
- 越长大,越幸运
- 康耐视研讨会总结
- 炸弹人
- 1515 - Pool construction
- HDOJ 5335 Walk Out 【bfs 贪心 斜行dp】
- JAVA 访问 SOAP 协议
- 数据库Fashback
- 307 - Sticks (深搜 + 剪枝)
- 多重继承
- Spring-MVC环境搭建
- Quartz cron表达式