【vijos 1107】 环游大同80天
来源:互联网 发布:ubuntu安装哪个版本 编辑:程序博客网 时间:2024/04/29 12:58
就相当于求树的直径,两次bfs。
#include <bits/stdc++.h>using namespace std;int b1[5] = {0,0,0,1,-1};int b2[5] = {0,1,-1,0,0};bool vis[1010][1010];char a1[1010][1010];int ans = 0, maxx = 0, maxy = 0, max1 = 0;int dfs(int x, int y){vis[x][y] = 1;for(int i = 1; i <= 4; i ++){int x1 = x+b1[i], y1 = y+b2[i];if(!vis[x1][y1]&&a1[x1][y1]=='.'){dfs(x1,y1);}}}struct node{int x, y, step;};bool vis2[1010][1010];queue <node> q1;int bfs(int x, int y){while(!q1.empty()) q1.pop();memset(vis2, 0, sizeof vis2);q1.push((node){x,y,0});while(!q1.empty()){node t = q1.front();q1.pop();if(t.step > ans) ans = t.step, maxx = t.x, maxy = t.y;for(int i = 1; i <= 4; i ++){int x1 = t.x+b1[i], y1 = t.y+b2[i];if(!vis2[x1][y1]&&a1[x1][y1]=='.'){q1.push((node){x1,y1,t.step+1});vis2[x1][y1] = 1;}}}}int main(){int n, m;scanf("%d%d", &n, &m);for(int i = 1; i <= n; i ++)scanf("%s", a1[i]+1);for(int i = 1; i <= n; i ++)a1[i][m+1] = '#';for(int i = 1; i <= n; i ++){for(int j = 1; j <= m; j ++){if(!vis[i][j]&&a1[i][j] == '.'){dfs(i,j);bfs(i,j);bfs(maxx,maxy);max1 = max(max1, ans);}}}printf("%d", max1);return 0;}
1 0
- 【vijos 1107】 环游大同80天
- 大同
- 2055: 80人环游世界
- bzoj2055 80人环游世界
- xoj 1754 80人环游世界
- BZOJ 2055:80人环游世界
- bzoj 2055 80人环游世界
- 30岁前,环游世界220天
- 大同市区
- 天下大同
- 大同语
- xoj 1754 80人环游世界(tour)
- xoj 1754 80人环游地球(tour)题解
- bzoj 2055 80人环游地球(上下界费用流)
- [上下界费用流] BZOJ2055 80人环游世界
- BZOJ 2055(80人环游世界-上下界网络流)
- [bzoj2055]80人环游世界 上下界费用流
- [上下界费用流] BZOJ2055. 80人环游世界
- Python 库的使用 —— dis
- java 内部类简单介绍
- 勾股定理一日一证连载111
- 力导向图练习
- 快速排序
- 【vijos 1107】 环游大同80天
- 制作一个简单的翻译软件
- 【每天进步一点点】 反思
- jvm参数详解
- 【vijos 1029】晴天小猪历险记之Number
- Promise.then fired with only one argument?
- 经典排序 图解 代码实现
- 可绑定可扩展的帐号系统设计原理及其实现(一)
- 《产品经理》读书笔记