HDU2612(BFS算法)

Problem Descrption

Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good friend Merceki.
Yifenfei’s home is at the countryside, but Merceki’s home is in the center of city. So yifenfei made arrangements with Merceki to meet at a KFC. There are many KFC in Ningbo, they want to choose one that let the total time to it be most smallest.
Now give you a Ningbo map, Both yifenfei and Merceki can move up, down ,left, right to the adjacent road by cost 11 minutes.

Input

The input contains multiple test cases.
Each test case include, first two integers n, m. (2<=n,m<=200).
Next n lines, each line included m character.
‘Y’ express yifenfei initial position.
‘M’    express Merceki initial position.
‘#’ forbid road;
‘.’ Road.
‘@’ KCF

Output

For each test case output the minimum total time that both yifenfei and Merceki to arrival one of KFC.You may sure there is always have a KFC that can let them meet.

Sample Input

4 4
Y.#@
....
.#..
@..M
4 4
Y.#@
....
.#..
@#.M
5 5
Y..@.
.#...
.#...
@..M.
#...#

Sample Output

66
88
66

问题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612

问题分析:一开始看到以为是DFS,写完发现,DFS会TL,然后百度一下都是用的BFS

DFS的TL代码

#include<iostream>
using namespace std;
int max(int x, int y)
{if (x > y)return x;else return y;
}
char a[200][205];
int p[200][205] = { 0 };
int min2 = 99999999;
int x, y,n1,m1,xe,ye,tx,ty;
int dfs(int x,int y,int step)
{int n[4][2] = { 1,0,-1,0,0,1,0,-1 };for (int i = 0; i < 4; i++){tx =x+ n[i][0];ty =y+ n[i][1];if (tx > n1-1 || ty > m1-1||tx<0||ty<0)continue;if (x == xe && y == ye){if (step + 1 < min2){min2 = step+1;}}if (p[tx][ty] == 0 && a[tx][ty] != '#'){p[tx][ty] = 1;dfs(tx, ty, step + 1);p[tx][ty] = 0;}}return min2;}
int main()
{while (cin >> n1 >> m1){int b[200][2];//KFCint t = 0;int x1, y1, x2, y2;for (int i = 0; i < n1; i++)for (int j = 0; j < m1; j++){cin >> a[i][j];if (a[i][j] == 'Y') { x1 = i, y1 = j; }if (a[i][j] == '@') { b[t][0] = i, b[t][1] = j, t++; }if (a[i][j] == 'M') { x2 = i, y2 = j; }}int min1 = 9999999, w;for (int i = 0; i < t; i++){xe = b[i][0], ye = b[i][1];w = max(dfs(x1,y1,0), dfs(x2,y2,0)) * 11;if (min1 > w)min1 = w;}cout << min1 << endl;}}

网上搜索到的AC代码:


#include<stdio.h>#include<algorithm>#include<cstring>#include<queue>using namespace std;int step[4][2]= {1,0,-1,0,0,1,0,-1};bool vis[210][210];char map[210][210];int stepnum[2][210][210];int n,m;struct node{int x,y,step;};int check(int x,int y){if(x>=1&&x<=n&&y>=1&&y<=m&&map[x][y]!='#')return 1;return 0;}void BFS(int a ,int x,int y){memset(vis,false,sizeof(vis));vis[x][y]=true;node point,newpoint;queue<node> q;point.x=x;point.y=y;point.step=0;q.push(point);while(!q.empty()){point=q.front();q.pop();if(map[point.x][point.y]=='@')//遇到KFC 记录所走的步数{stepnum[a][point.x][point.y]=point.step;}for(int i=0; i<4; i++){newpoint.x=point.x+step[i][0];newpoint.y=point.y+step[i][1];if(check(newpoint.x,newpoint.y)&&!vis[newpoint.x][newpoint.y]){vis[newpoint.x][newpoint.y]=true;newpoint.step=point.step+1;//每走一格 步数+1q.push(newpoint);}}}}int main (void){while(~scanf("%d%d",&n,&m)){int ax,ay,bx,by;getchar();for(int i=1; i<=n; i++){for(int ii=1; ii<=m; ii++){scanf("%c",&map[i][ii]);if(map[i][ii]=='Y'){ax=i;ay=ii;}else if(map[i][ii]=='M'){bx=i;by=ii;}}getchar();}memset(stepnum,0x3f3f3f3f,sizeof(stepnum));//一定要放在BFS之前 如果放在BFS里面,第二次BFS时,会把第一次BFS的值覆盖 结果出错BFS(0,ax,ay);BFS(1,bx,by);int step_num=0x3f3f3f3f;for(int i=1; i<=n; i++){for(int ii=1; ii<=m; ii++){if(map[i][ii]=='@')//找出同一个KFC中需要走最小的那个点{step_num=min(step_num,stepnum[0][i][ii]+stepnum[1][i][ii]);}}}printf("%d\n",step_num*11);}return 0;}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

es 嵌套类型聚合

【1】分组后求均值聚合 //dsl {"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"filter":[{"term":{"STATE":"PDOS"} }]} }, "aggs"…

2017年,Java程序猿10本经典好书推荐

1、Java 8实战 本书全面介绍了Java 8 这个里程碑版本的新特性&#xff0c;包括Lambdas、流和函数式编程。有了函数式的编程特性&#xff0c;可以让代码更简洁&#xff0c;同时也能自动化地利用多核硬件。全书分四个部分&#xff1a;基础知识、函数式数据处理、高效Java 8 编程和…

es嵌套聚合dsl(求均值,求和)

【1】根据客户号分组后求均值和求和 // dsl {"_source":["RCRD_ID", "STATE", "BUSI_CODE"], "query":{"bool":{"filter":[{"term":{"STATE":"PDOS"} }]} }, &…

字符串拼接+和concat的区别

转载自 字符串拼接和concat的区别和concat都可以用来拼接字符串&#xff0c;但在使用上有什么区别呢&#xff0c;先来看看这个例子。 public static void main(String[] args) {// example1String str1 "s1";System.out.println(str1 100);//s1100System.out.prin…

thinking-in-java(21)并发2

think-in-java 并发前半部分&#xff08;并发1&#xff09;参见&#xff1a; https://blog.csdn.net/PacosonSWJTU/article/details/104855730 【21.4.3】中断 1、Thread类包含 interrupt方法&#xff0c;可以终止被阻塞的任务。这个方法将设置线程的中断状态。 如果一个线程…

HDU1176(DP)

Problem Description 都说天上不会掉馅饼&#xff0c;但有一天gameboy正走在回家的小径上&#xff0c;忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了&#xff0c;这馅饼别处都不掉&#xff0c;就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了&am…

Java趣味分享:try/finally

转载自 Java趣味分享&#xff1a;try/finally考虑以下四个测试方法&#xff0c;它们会输出什么&#xff1f;public class Test {public static void main(String[] args) {System.out.println(test1());System.out.println(test2());System.out.println(test3());System.out.pr…

(转)ThreadPoolExecutor最佳实践--如何选择队列

转自&#xff1a; https://blog.hufeifei.cn/2018/08/12/Java/ThreadPoolExecutor%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5--%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%E9%98%9F%E5%88%97/ 前一篇文章《如何选择线程数》讲了如何决定线程池中线程个数&#xff0c;这篇文章讨论“如何…

HDU1576(欧几里得算法)

Problem Descption 要求(A/B)%9973&#xff0c;但由于A很大&#xff0c;我们只给出n(nA%9973)(我们给定的A必能被B整除&#xff0c;且gcd(B,9973) 1)。 Input 数据的第一行是一个T&#xff0c;表示有T组数据。 每组数据有两个数n(0 < n < 9973)和B(1 < B < 10^…

为什么byte取值-128~127??

转载自 为什么byte取值-128~127??java设计byte类型为1个字节&#xff0c;1个字节占8位&#xff0c;即8bit&#xff0c;这是常识。另外&#xff0c;计算机系统中是用补码来存储的&#xff0c;首位为0表示正数&#xff0c;首位为1表示负数&#xff0c;所以有以下结论&#xff1…

(转)threadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别

最近在看并发编程&#xff0c;在使用到ThreadPoolExecutor时&#xff0c;对它的三个关闭方法&#xff08;shutdown()、shutdownNow()、awaitTermination()&#xff09;产生了兴趣&#xff0c;同时又感到迷惑。查了些资料&#xff0c;自己写了测试代码&#xff0c;总算有了个比较…

HDU2049(错列排序)

国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的: 首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排; 然后,让各位新郎寻找自己的新娘.每人只准找一个,…

厉害了,Servlet3的异步处理机制

转载自 厉害了&#xff0c;Servlet3的异步处理机制Servlet3发布好几年了&#xff0c;又有多少人知道它的新特性呢&#xff1f;下面简单介绍下。 主要增加了以下特性&#xff1a; 1、异步处理支持 2、可插性支持 3、注解支持&#xff0c;零配置&#xff0c;可不用配置web.xml ..…

(转)Elasticsearch 聚合查询、桶聚合、管道聚合及复合查询

转自&#xff1a; https://blog.csdn.net/zx711166/article/details/81906881 聚合查询 聚合是一种基于查询条件对数据进行分桶、计算的方法。 聚合可以嵌套&#xff0c;由此可以组合复杂的操作&#xff08;Bucketing 聚合可以包含 sub-aggregation&#xff09;。 聚合的三种…

3种常见的Class级别的错误

转载自 3种常见的Class级别的错误ClassNotFoundException 很明显&#xff0c;这个错误是 找不到类异常&#xff0c;即在当前classpath路径下找不到这个类。 ClassNotFoundException继承了Exception&#xff0c;是必须捕获的异常&#xff0c;所以这个异常一般发生在显示加载类的…

(转)es 聚合查询并返回每个组的数据

转自&#xff1a; https://blog.csdn.net/ywdhzxf/article/details/84878760 需求 我现在是有一个这样的需求, 我需要在es里面按照 cityarea 进行分组(group by), 并且每个 cityarea的组 需要展示 按照时间排序的前10条, 状态全部为1的数据 实现 { "query": {…

java程序员被误导的一个概念,Set也可以有序

转载自 java程序员被误导的一个概念&#xff0c;90%人不知道我们经常听说List是有序且重复的&#xff0c;Set是无序不重复的。这里有个误区&#xff0c;这里说的顺序有两个概念&#xff0c;一是按添加的顺序排列&#xff0c;二是按自然顺序a-z排列。Set并不是无序的&#xff0c…

es7 bulk api 批量插入es

post localhost:9200/cuiji/_doc/_bulk {"index":{}} {"RCRD_ID":"RD_TR_001", "CUST_NUM":"CUSTA", "LAST_MODIFY_TIME":"2020-07-18 00:00:50", "NOTE_CONTENT":"催记A001"} {…

TreeSet的null值与元素类型的约束

一、TreeSet Java的TreeSet通过TreeMap来实现&#xff0c;具有自然排序的功能。 在默认情况下&#xff0c;元素不允许为null值&#xff0c;元素必须是相同类型&#xff0c;元素必须实现了Comparable接口&#xff1b;否则会出现java.lang.ClassCastException。 可以通过设置Comp…

转-HTTPClient调用https请求,通过基本认证用户名密码(Basic Auth)

转自&#xff1a; https://blog.csdn.net/qq_27605885/article/details/79131483 本文来源是Apache官网例子&#xff1a;http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/examples/org/apache/http/examples/client/ClientAuthentication.java 之前找过很多博客…