啊哈炸弹人(dfs bfs)
来源:互联网 发布:尚学堂白鹤翔js第二季 编辑:程序博客网 时间:2024/05/21 08:42
因为这个题当放置炸弹可以炸掉敌人最多的时候,人物不一定能走到那个位置,所以搜索任务可以走的位置,然后计算这点上可以消灭多少敌人
特殊注意以下两个搜索都别忘记对最开始的起点进行getboom和visit,就相当于假设出发点就为可以消灭敌人最多的点
bfs
<span style="font-size:14px;">#include <iostream>using namespace std;struct node{ int x; int y;};struct node que[401];char map[50][50];int visit[50][50];int next_[4][2]={{0,1},{1,0},{0,-1},{-1,0}};int n,m,tx,ty,startx,starty,sum,max_=0;int head,tail,mx,my;int getboom(int x,int y){ int sum_=0,i,j; i=x,j=y; while(map[i][j]!='#') { if(map[i][j]=='G') sum_++; i--; } i=x;j=y; while(map[i][j]!='#') { if(map[i][j]=='G') sum_++; i++; } i=x;j=y; while(map[i][j]!='#') { if(map[i][j]=='G') sum_++; j--; } i=x;j=y; while(map[i][j]!='#') { if(map[i][j]=='G') sum_++; j++; } return sum_; }int main(){ int i,j; n=13,m=13; startx=3,starty=3; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cin>>map[i][j]; } } head=tail=1; que[tail].x=startx; que[tail].y=starty; visit[startx][starty]=1; max_=getboom(startx,starty); tail++; mx=startx; my=starty; while(head<tail) { for(i=0;i<4;i++) { tx=que[head].x+next_[i][0]; ty=que[head].y+next_[i][1]; if(tx<1 || tx>n || ty<1 || ty>m) continue; if(map[tx][ty]=='.' && visit[tx][ty]==0) { visit[tx][ty]=1; que[tail].x=tx; que[tail].y=ty; tail++; sum=getboom(tx,ty); if(sum>max_) { max_=sum; mx=tx; my=ty; } } } head++;//四个方向都探索完了后,这个点就可以出队列了所以在for语句外写 } cout<<max_<<' '<<mx<<' '<<my;}//#############//#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#//#############</span>dfs
#include <iostream>using namespace std;char map[50][50];int visit[50][50];int next_[4][2]={{0,1},{1,0},{0,-1},{-1,0}};int n,m,tx,ty,startx,starty,sum,max_=0;int head,tail,mx,my;int getboom(int x,int y){ int sum_=0,i,j; i=x,j=y; while(map[i][j]!='#') { if(map[i][j]=='G') sum_++; i--; } i=x;j=y; while(map[i][j]!='#') { if(map[i][j]=='G') sum_++; i++; } i=x;j=y; while(map[i][j]!='#') { if(map[i][j]=='G') sum_++; j--; } i=x;j=y; while(map[i][j]!='#') { if(map[i][j]=='G') sum_++; j++; } return sum_; }void dfs(int x,int y){ int i; for(i=0;i<4;i++) { tx=x+next_[i][0]; ty=y+next_[i][1]; if(tx<1 || tx>n || ty<1 || ty>m) continue; if(map[tx][ty]=='.' && visit[tx][ty]==0) { visit[tx][ty]=1; sum=getboom(tx,ty); if(sum>max_) { max_=sum; mx=tx; my=ty; } dfs(tx,ty); //visit[tx][ty]=0; } }}int main(){ int i,j; n=13,m=13; startx=3,starty=3; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cin>>map[i][j]; } } visit[startx][starty]=1; max_=getboom(startx,starty); mx=startx; my=starty; dfs(startx,starty); cout<<max_<<' '<<mx<<' '<<my;}//#############//#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#//#############
0 0
- 啊哈炸弹人(dfs bfs)
- 啊哈算法搜索应用之再解炸弹人(DFS与BFS)
- DFS/BFS(解决炸弹人)
- BFS DFS (2) 走迷宫 炸弹人
- 啊哈!算法—枚举之炸弹人
- 啊哈算法搜索应用之宝岛探险(BFS和DFS)
- BFS深度优先搜索 炸弹人
- BFS广度优先搜索 炸弹人
- 啊哈迷宫bfs解决方法
- 第16周 啊哈算法 炸弹人(两种算法注意对比)
- bfs炸弹超人
- 啊哈报道探险(基础bfs)
- 炸弹人
- 炸弹人
- 炸弹人
- BFS-DFS
- BFS DFS
- DFS+BFS
- C语言实现简单黑客帝国代码流
- 第八周训练7谁是小偷
- Maven学习总结(一)——Maven入门
- 数据库添加插入语句
- 你想成为出色的代码编写者吗?奉上八大方式
- 啊哈炸弹人(dfs bfs)
- RN导入三方组件,chrome调试
- 什么是JSONP?
- IOS开发UI篇--IOS动画(Core Animation)总结
- HDU ACM 11 2066 一个人的旅行
- yum安装ZABBIX
- 第八周-小球自由下落
- 成为架构师的7个关键思考、习惯和经验
- 移动端click事件300ms延迟