POJ 3170 BFS 水题
来源:互联网 发布:移除数组中的重复元素 编辑:程序博客网 时间:2024/06/08 10:40
第一次把寻找从开始点到每个草莓的最短路
第二次寻找每个草莓到守护者的最短路
两次 BFS 就是了,注意第一次不能通过 3
#include <stdio.h>#include <iostream>#include <queue>#include <algorithm>#include <map>#include <vector>#include <cmath>#include <string.h>#include <stdlib.h>#include <time.h>#include <fstream>#include <set>#include <stack>using namespace std;#define READ freopen("acm.in","r",stdin)#define WRITE freopen("acm.out","w",stdout)#define ll long long#define ull unsigned long long #define PII pair<int,int>#define PDI pair<double,int>#define PDD pair<double,double>#define MII map<int,int>::iterator #define fst first#define sec second#define MS(x,d) memset(x,d,sizeof(x))#define INF 0x3f3f3f3f#define ALL(x) x.begin(),x.end()#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define ROOT 0,n-1,1#define PB push_back#define FOR(a,b,c) for(int a=b;a<c;a++)#define MOD 1000000007#define keyTree (ch[ ch[root][1] ][0])#define MAX 200000int b[1111][1111];PII S,T;int n,m;bool used[1111][1111];int dist1[1111][1111];int dist2[1111][1111];int dir[4][2]={0,1,1,0,-1,0,0,-1};vector<PII> cm;void bfs(PII s,bool flag,int dist[][1111]){queue<PII> q;q.push(s);MS(used,0);used[s.fst][s.sec]=1;dist[s.fst][s.sec]=0;int cnt=0;while(!q.empty()){PII p=q.front();q.pop();int x=p.fst,y=p.sec;if(b[x][y]==4)cnt++;if(cnt==cm.size())return;for(int i=0;i<4;i++){int tx=x+dir[i][0];int ty=y+dir[i][1];if(tx>=0&&tx<n&&ty>=0&&ty<m&&b[tx][ty]!=1&&!used[tx][ty]){if(!flag&&b[tx][ty]==3)continue;dist[tx][ty]=dist[x][y]+1;used[tx][ty]=1;q.push(PII(tx,ty));}}}}int main(){while(scanf("%d%d",&m,&n)!=EOF){cm.clear();for(int i=0;i<n;i++)for(int j=0;j<m;j++){int t;scanf("%d",&t);if(t==2)S.fst=i,S.sec=j;if(t==3)T.fst=i,T.sec=j;if(t==4)cm.PB(PII(i,j));b[i][j]=t;}int ans=INF;MS(dist1,0);MS(dist2,0);bfs(S,0,dist1);bfs(T,1,dist2);for(int i=0;i<cm.size();i++){int x=cm[i].fst,y=cm[i].sec;if(dist1[x][y]&&dist2[x][y]){ans=min(ans,dist1[x][y]+dist2[x][y]);}}cout<<ans<<endl;}}
1 0
- POJ 3170 BFS 水题
- POJ 3170--双重BFS
- POJ 3278 BFS水题
- Poj 1426 (Bfs 水题)
- [BFS] poj
- poj 3170 Knights of Ni (bfs)
- POJ 3170(bfs求最短路)
- POJ 3984 迷宫问题 (BFS,水题)
- poj 3669 Meteor Shower bfs水题
- POJ-3984迷宫问题 (BFS,水题)
- POJ 2251 Dungeon Master <三维BFS水题>
- poj 3626 简单bfs
- POJ 3278 : 经典BFS
- poj 3126 简单bfs
- poj 3278 简单bfs
- poj 2243 bfs
- poj 1856 bfs
- POJ 3697 BFS暴力
- linux常用命令
- VS2010 2012 开发下一些常用功能收集日志
- C# 保存图片时压缩(压缩要保存的图片)
- tmp
- 第21天dao模型二(更为精简)之泛型的反射
- POJ 3170 BFS 水题
- 设计模式学习(一) 单例模式
- 百度面试题1
- C语言 文件操作函数
- Java和Android文件操作
- 上传漏洞科普[3]-MIME验证
- 信息系统修改版 c语言 控制台版
- ubuntu12.04 下 利用 qemu kgdb 调试kernel
- hadoop hdfs2 Basic Filesystem Operations