两遍bfs ~

#include <cstdio>
#include <cstdlib>
//#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <vector>
#include <sstream>
#include <string>
#include <cstring>
#include <algorithm>
#include <iostream>
#define maxn 1010
#define INF 0x7fffffff
#define inf 10000000
#define ull unsigned long long
#define ll long long
using namespace std;
int g[maxn][maxn], m, n, vis[maxn][maxn], dis1[maxn][maxn], dis2[maxn][maxn], x1, x2, y1, y2;
int q[maxn*maxn];
int dx[] = {1 , 0, 0, -1}, dy[] = {0, 1, -1, 0};
void bfs1(int x, int y)
{
int front = 0, rear = 0, u;
vis[x][y] = 1;
u = x*m+y;
dis1[x][y] = 0;
q[rear++] = u;
while(front < rear)
{
u = q[front++];
x = u/m, y = u%m;
for(int i = 0; i < 4; ++ i)
{
int nx = x+dx[i], ny = y+dy[i];
if(nx >= 0 && nx < n && ny >= 0 && ny < m && g[nx][ny] != 1 && !vis[nx][ny])
{
int v = nx*m+ny;
q[rear++] = v;
vis[nx][ny] = 1;
dis1[nx][ny] = dis1[x][y]+1;
}
}
}
// puts("");
// for(int i = 0; i < n; ++ i)
// {
// for(int j = 0 ; j < m; ++ j)
// {
// printf("%d ", dis1[i][j]);
// }
// puts("");
// }
}
void bfs2(int x, int y)
{
int front = 0, rear = 0, u;
vis[x][y] = 1;
u = x*m+y;
dis2[x][y] = 0;
q[rear++] = u;
while(front < rear)
{
u = q[front++];
x = u/m, y = u%m;
for(int i = 0; i < 4; ++ i)
{
int nx = x+dx[i], ny = y+dy[i];
if(nx >= 0 && nx < n && ny >= 0 && ny < m && g[nx][ny] != 1 && !vis[nx][ny])
{
int v = nx*m+ny;
q[rear++] = v;
vis[nx][ny] = 1;
dis2[nx][ny] = dis2[x][y]+1;
}
}
}
// puts("");
// for(int i = 0; i < n; ++ i)
// {
// for(int j = 0 ; j < m; ++ j)
// {
// printf("%d ", dis2[i][j]);
// }
// puts("");
// }
}
void init()
{
for(int i = 0; i < n; ++ i)
for(int j = 0 ; j < m; ++ j)
{
dis1[i][j] = dis2[i][j] = inf;
}
}
int main()
{
while(scanf("%d%d", &m, &n) == 2)
{
init();
for(int i = 0; i < n; ++ i)
for(int j = 0 ; j < m; ++ j)
{
scanf("%d", &g[i][j]);
if(g[i][j] == 2)
x1 = i, y1 = j;
else if(g[i][j] == 3)
x2 = i, y2 = j;
}
memset(vis, 0, sizeof(vis));
bfs1(x2, y2);
memset(vis, 0, sizeof(vis));
vis[x2][y2] = 1;
bfs2(x1, y1);
int ans = inf;
for(int i = 0; i < n; ++ i)
for(int j = 0 ; j < m; ++ j)
{
if(g[i][j] == 4)
ans = min(ans, dis1[i][j]+dis2[i][j]);
}
printf("%d\n", ans);
}
return 0;
}

poj 3170的更多相关文章

  1. POJ 3170 Knights of Ni (暴力,双向BFS)

    题意:一个人要从2先走到4再走到3,计算最少路径. 析:其实这个题很水的,就是要注意,在没有到4之前是不能经过3的,一点要注意.其他的就比较简单了,就是一个双向BFS,先从2搜到4,再从3到搜到4, ...

  2. POJ 3170 线段树优化DP

    题意: 思路: 先搞一个vector 存以T2结尾的结构体 (结构体里面有开始工作的时间和花费) f[i]表示取区间[M,i)的代价 易得f[i]=min(f[k]+w,f[i]);T1<=k ...

  3. POJ 3648 Wedding(2-SAT的模型运用+DFS | Tarjan)

    Wedding Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10427   Accepted: 3170   Specia ...

  4. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

  5. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  6. POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22286 ...

  7. POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 37427   Accepted: 16288 Descr ...

  8. POJ 3254. Corn Fields 状态压缩DP (入门级)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9806   Accepted: 5185 Descr ...

  9. POJ 2739. Sum of Consecutive Prime Numbers

    Sum of Consecutive Prime Numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20050 ...

随机推荐

  1. c#实现数据集合转换为csv文本

    需求 1.将一个数据集合导出到一个csv文件中,集合类型可以视为 List<T>,T为任意类型,T包含多个属性,可指定部分属性进行导出 2.软件中有多种不同类型的数据类型需要进行导出 需求 ...

  2. (转)为首次部署MongoDB做好准备:容量计划和监控

    如果你已经完成了自己新的MongoDB应用程序的开发,并且现在正准备将它部署进产品中,那么你和你的运营团队需要讨论一些关键的问题: 最佳部署实践是什么? 为了确保应用程序满足它所必须的服务层次我们需要 ...

  3. 分布式MySQL 数据库

    http://zhangxugg-163-com.iteye.com/blog/1666673 而本文所描述的 federated属于 MySQL的一种特殊引擎,利用它可将本地数据表映射至远程 MyS ...

  4. IPC with pipes, demo of 'popen'

    #include <stdio.h> #include <unistd.h> int main() { FILE* stream = popen ("sort&quo ...

  5. if语句代码优化

    if($sum==7){ $sz+=135; }elseif($sum==5){ $sz+=80; }elseif($sum==6){ $sz+=97; }elseif($sum==4){ $sz+= ...

  6. HTML5+CSS3+JQuery打造自定义视频播放器

    来源:http://www.html5china.com/HTML5features/video/201109206_1994.html 简介HTML5的<video>标签已经被目前大多数 ...

  7. Bootstrap Paginator 分页 demo.

    效果如下: 需要的引用以下内容 bootstrap2 http://cnbootstrap.com/ bootstrap-paginator v0.5 主页 http://bootstrappagin ...

  8. JQuery插件开发 - 模板

    (function($) { $.fn.PluginName = function(options) { // 创建一个默认设置对象 var defaults = { key : "Defa ...

  9. Excel多条件筛选、公式填充

    接到一个任务,由于数据操作人员不会使用编辑公式进而无法进行相关筛选,所以要我帮忙.好久不碰Excel了,那就试试看吧. 需求是这样子的(这里做了最大化的简化):要求判断条件,男50岁以上,女40岁以上 ...

  10. IP进制站群原理

    百度搜索:“inurl:0×00”,会发现全是以八进制.十六进制形式显示的域名(如下图),当点击后,浏览器会自动将这些域名转换为十进制的ip.这种方式在黑帽圈目前挺火爆的,用于做长尾词排名,可以带来可 ...