HDU2612 -暑假集训-搜索进阶N

 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82828#problem/N
这两天总是因为一些小错误耽误时间,我希望自己可以细心点。珍惜时间,珍爱生命!

#include<iostream> #include<algorithm> #include<string.h> #include<ctype.h> #include<stdio.h> #include<stdlib.h> #include<math.h> #include<limits.h> #include<queue> #include<stack> using namespace std; #define INF 0xfffffff #define max(a, b) a>b?a:b #define min(a, b) a<b?a:b #define N 210 int dir[4][2]= {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; int m, n, visit[N][N]; char maps[N][N]; typedef struct maze { int x, y, s; } MAZE; MAZE a, b; struct node { int t1, t2, t; } p[N][N]; void BFS(); void bfs(); void print(); int main() { while(scanf("%d%d", &m, &n)!=EOF) { for(int i=0; i<m; i++) { getchar(); for(int j=0; j<n; j++) { scanf("%c", &maps[i][j]); if(maps[i][j]=='Y') { a.x=i; a.y=j; a.s=0; maps[i][j]='.'; } if(maps[i][j]=='M') { b.x=i; b.y=j; b.s=0; maps[i][j]='.'; } } } memset(p, 0, sizeof(p)); memset(visit, 0, sizeof(visit)); BFS(); memset(visit, 0, sizeof(visit)); bfs(); print(); } return 0; } void BFS() { queue<MAZE>Q; Q.push(a); MAZE v, w; visit[a.x][a.y]=1; while(!Q.empty()) { w=Q.front(); p[w.x][w.y].t1=w.s; Q.pop(); for(int i=0; i<4; i++) { v.x=w.x+dir[i][0]; v.y=w.y+dir[i][1]; v.s=w.s+1; if(v.x>=0&&v.x<m&&v.y>=0&&v.y<n&&maps[v.x][v.y]!='#'&&visit[v.x][v.y]==0) { visit[v.x][v.y]=1; Q.push(v); } } } } void bfs() { queue<MAZE>q; q.push(b); visit[b.x][b.y]=1; MAZE z, w; while(q.size()) { w=q.front(); p[w.x][w.y].t2=w.s; q.pop(); for(int i=0; i<4; i++) { z.x=w.x+dir[i][0]; z.y=w.y+dir[i][1]; z.s=w.s+1; if(z.x>=0&&z.x<m&&z.y>=0&&z.y<n&&maps[z.x][z.y]!='#'&&visit[z.x][z.y]==0) { visit[z.x][z.y]=1; q.push(z); } } } } void print() { int w=INT_MAX; int ans; for(int i=0; i<m; i++) for(int j=0; j<n; j++) { if(maps[i][j]=='@') { if(p[i][j].t1!=0&&p[i][j].t2!=0) { ans=p[i][j].t1+p[i][j].t2;; if(ans<w) { w=ans; } } } } printf("%d ", w*11); }

 

原文地址:https://www.cnblogs.com/wazqWAZQ1/p/4658422.html