再解炸弹人,dfs&bfs
输入样例:
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#
#############
输出样例:
炸弹放置在(8,12),消灭敌人最多为10
深搜代码:
#include<cstdio>
#include<iostream>
#define INF 10000000
using namespace std;
char a[][];
int b[][];
int next[][]={{,},{,},{,-},{-,}};//四个方向
int maxx=,mx,my,tx,ty,n,m;
int getsum(int x,int y)//计算一共可以消灭的敌人
{
int sum=;
int i=x,j=y;
while(a[i][j]!='#')//向下
{
if(a[i][j]=='G')sum++;
i++;
}
i=x;j=y;
while(a[i][j]!='#')//向上
{
if(a[i][j]=='G')sum++;
i--;
}
i=x;j=y;
while(a[i][j]!='#')//向左
{
if(a[i][j]=='G')sum++;
j--;
}
i=x;j=y;
while(a[i][j]!='#')//向右
{
if(a[i][j]=='G')sum++;
j++;
}
return sum;
} void dfs(int x,int y)
{
int sum=getsum(x,y);
if(sum>maxx)//更新最大值
{
maxx=sum;
mx=x;
my=y;
}
for(int i=;i<;i++)
{
tx=x+next[i][];
ty=y+next[i][];
if(tx>n||ty>m||tx<||ty<)//判断越界
continue;
if(b[tx][ty]==&&a[tx][ty]=='.')//未被标记并且是空地
{
b[tx][ty]=;//此处不用还原标记数组,因为不是找路径而是记录每个点消灭敌人的数
dfs(tx,ty);
}
}
return ;
} int main()
{
int sx,sy;
scanf("%d%d%d%d",&n,&m,&sx,&sy);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf(" %c",&a[i][j]);
dfs(sx,sy);
printf("炸弹放置在(%d,%d),消灭敌人最多为%d\n",mx,my,maxx);
return ;
}
广搜代码:
#include<cstdio>
#include<iostream>
#define INF 10000000
using namespace std;
char a[][];
int b[][];
int next[][]={{,},{,},{,-},{-,}};//四个方向 struct node//用结构体模拟队列
{
int x;
int y; }que[]; int getsum(int x,int y)//计算一共可以消灭的敌人
{
int sum=;
int i=x,j=y;
while(a[i][j]!='#')//向下
{
if(a[i][j]=='G')sum++;
i++;
}
i=x;j=y;
while(a[i][j]!='#')//向上
{
if(a[i][j]=='G')sum++;
i--;
}
i=x;j=y;
while(a[i][j]!='#')//向左
{
if(a[i][j]=='G')sum++;
j--;
}
i=x;j=y;
while(a[i][j]!='#')//向右
{
if(a[i][j]=='G')sum++;
j++;
}
return sum;
} int main()
{
int n,m,sx,sy,tx,ty,mx,my;
scanf("%d%d%d%d",&n,&m,&sx,&sy);
//getchar();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf(" %c",&a[i][j]);
//初始化队列
int head=;
int tail=;
//将起点入队
que[tail].x=sx;
que[tail].y=sy;
tail++;//队尾指针++,队尾指针要指向空队列
b[sx][sy]=;//标记起点
int maxx=getsum(sx,sy);
int flag=,sum;
//开始广搜
while(head<tail)//队列不为空
{
for(int i=;i<;i++)//四个方向搜索
{
//计算从父亲(head)点到下一个点
tx=que[head].x+next[i][];
ty=que[head].y+next[i][];
if(tx<||ty<||tx>n||ty>m)//是否越界
{
continue;
}
if(b[tx][ty]==&&a[tx][ty]=='.')//这个点没有走过并且是空地
{
b[tx][ty]=;//标记走过,此处与深搜不同,不能还原标记
//将此点入队
que[tail].x=tx;
que[tail].y=ty;
tail++;//队尾指针++
sum=getsum(tx,ty);
if(sum>maxx)
{
maxx=sum;
mx=tx;
my=ty;
}
}
}
head++;//四个方向可以进入路径的都已入队,将head出队
}
printf("炸弹放置在(%d,%d),消灭敌人最多为%d\n",mx,my,maxx);
return ;
}
再解炸弹人,dfs&bfs的更多相关文章
- 再解炸弹人——BFS
原创 之前用了枚举法解炸弹人,题目详情请看我之前的博客:https://www.cnblogs.com/chiweiming/p/9295262.html 利用枚举法是无视地图布局的,枚举法直接全局搜 ...
- 三解炸弹人——DFS
原创 枚举解炸弹人—— https://www.cnblogs.com/chiweiming/p/9295262.html BFS解炸弹人—— https://www.cnblogs.com/chiw ...
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
[题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...
- HDU 4414 Finding crosses (DFS + BFS)
题意:在N*N的图中,找出孤立存在的十字架的个数.十字架要求为正十字,孤立表示组成十字架的‘#的周围的一格再无’#‘. dfs找出在中心的‘#’(周围四格也为‘#'),则缩小了搜索范围,再bfs找出是 ...
- ID(dfs+bfs)-hdu-4127-Flood-it!
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4127 题目意思: 给n*n的方格,每个格子有一种颜色(0~5),每次可以选择一种颜色,使得和左上角相 ...
- HDU 4771 (DFS+BFS)
Problem Description Harry Potter has some precious. For example, his invisible robe, his wand and hi ...
- POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE
POJ 3083 -- Children of the Candy Corn(DFS+BFS) 题意: 给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走 1)先输出左转优先时,从S到E的步数 ...
- [LeetCode]695. 岛屿的最大面积(DFS/BFS)、200. 岛屿数量(DFS/BFS待做/并差集待做)
695. 岛屿的最大面积 题目 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被 ...
- DFS/BFS+思维 HDOJ 5325 Crazy Bobo
题目传送门 /* 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 在树上的路径权值都小于这两个点 DFS/BFS+思维:按照权值的大小,从小的到大的连有 ...
随机推荐
- application.properties详解 --springBoot配置文件【转载】
# spring boot application.properties配置的各个属性详解 # 该示例文件作为标准提供.(官方文档 翻译过来的) # 还是花了些功夫翻译,各位如果转发,请留下本文地址, ...
- C语言 结构体中的零长度数组
/* C语言零长度数组大小和取值问题 */ #include <stdio.h> #include <stdlib.h> #include <string.h> s ...
- JAVA并发理论与实践
JDK5.0中更灵活.更具可伸缩性的锁定机制 流行的原子 非阻塞算法简介
- Zend Optimizer,Zend Guard Loader 和 Zend Opcache 三者之间的区别
PHP的加速插件有三个:Zend Optimizer.Zend Guard Loader 和 Zend Opcache.但其实都是一个,针对不通的php版本.名字叫法不一样而已. Zend Optim ...
- VxWorks信号量问题
VxWorks主要提供如下API进行信号量的创建.获取和释放: 参数1:SEM_Q_PRIORITY,SEM_Q_FIFO SEM_Q_PRIORITY(值为0x1):需要获取该信号量的任务基于优 ...
- [原]CentOS7安装Rancher2.1并部署kubernetes (一)---部署Rancher
################## Rancher v2.1.7 + Kubernetes 1.13.4 ################ ##################### ...
- 读《javascript语法精粹》知识点总结
昨天泡了大半天的读书馆,一口气看完了<javascript语法精粹>这本书,总体来说这本书还是写的不错,难怪那么多的推荐.<javascript语法精粹>主要是归纳与总结了ja ...
- nw.js---创建一个点击菜单
使用nw.js创建一个可点击的菜单: <!doctype html> <html lang="en"> <head> <meta char ...
- Spark Distributed matrix 分布式矩阵
RowMatrix行矩阵 import org.apache.spark.rdd.RDD import org.apache.spark.mllib.linalg.Vectors import org ...
- mac重启,开启apache时报错~~~镜像没有找到
mac重启apache时,报类似下面的错 dyld: Library not loaded: /usr/local/lib/libjpeg8.dylib Referenced from: /usr/l ...