BFS 广搜
Posted 让自己不再小小的
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BFS 广搜相关的知识,希望对你有一定的参考价值。
HDU 2612
#include<stdio.h> #include<string.h> #include<iostream> #include<queue> using namespace std; #define INF 0x3f3f3f3f #define N 210 int n, m; char maps[N][N]; int vis[N][N], dis[N][N][2], f; int dir[4][2]={{1,0}, {0,1}, {-1,0}, {0,-1}}; struct node { int x, y, step; }; queue <node> q; void BFS(int x, int y) { node head, next; head.x=x; head.y=y; head.step=0; vis[x][y]=1; q.push(head); while(!q.empty()) { head=q.front(); q.pop(); for(int i=0; i<4; i++) { next.x=head.x+dir[i][0]; next.y=head.y+dir[i][1]; if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&!vis[next.x][next.y] &&(maps[next.x][next.y]==‘.‘||maps[next.x][next.y]==‘@‘)) { vis[next.x][next.y]=1; next.step=head.step+1; if(maps[next.x][next.y]==‘@‘) dis[next.x][next.y][f]=min(dis[next.x][next.y][f], next.step); q.push(next); } } } } int main() { while(~scanf("%d%d", &n, &m)) { memset(dis, INF, sizeof(dis)); for(int i=0; i<n; i++) scanf("%s", maps[i]); for(int i=0; i<n; i++) for(int j=0; j<m; j++) { if(maps[i][j]==‘Y‘) { f=0; memset(vis, 0, sizeof(vis)); BFS(i, j); } else if(maps[i][j]==‘M‘) { f=1; memset(vis, 0, sizeof(vis)); BFS(i, j); } } int ans=INF; for(int i=0; i<n; i++) for(int j=0; j<m; j++) { if(maps[i][j]==‘@‘&&ans>dis[i][j][0]+dis[i][j][1]) ans=dis[i][j][0]+dis[i][j][1]; } printf("%d\n", ans*11); } }
以上是关于BFS 广搜的主要内容,如果未能解决你的问题,请参考以下文章