hdu 2612 bfs 广搜 距离和的最小值
来源:互联网 发布:华为云计算做得怎么样 编辑:程序博客网 时间:2024/05/22 02:06
这个题应用了一种新的思想,就是把运用三维数组a[x][y][z]来存储点x,y之间的距离比如 a[x][y][5] 表示x,y 之间的 距离是5;然后用一个求和的遍历,便可以求出最小值。
本题目还是应用bfs求出最短路。
#include<iostream>#include<queue>#define N 210#define inf 0xffffffusing namespace std;int m,n,mark[N][N],dis[N][N][2],dir[4][2]={1,0, 0,1, -1,0, 0,-1},flag;char s[N][N];struct node{ int x,y,step;};bool judge(int x,int y){ if(x>=0 && x<m && y>=0 && y<n && s[x][y]!='#' && mark[x][y]==0) return 1; return 0;}void bfs(int x,int y){ int k; queue<node>q; node cur,next; cur.x=x;cur.y=y;cur.step=0; mark[x][y]=1; q.push(cur); while(!q.empty()) { cur=q.front(); q.pop(); next.step=cur.step+1; for(k=0;k<4;k++) { next.x=x=cur.x+dir[k][0]; next.y=y=cur.y+dir[k][1]; if(judge(x,y)) { mark[x][y]=1; if(s[x][y]=='@') dis[x][y][flag]=next.step; q.push(next); } } }}int main(){ int i,j,min; while(scanf("%d %d",&m,&n)!=-1) { min=inf; for(i=0;i<m;i++) for(j=0;j<n;j++) dis[i][j][0]=dis[i][j][1]=inf; for(i=0;i<m;i++) scanf("%s",s[i]); for(i=0;i<m;i++) for(j=0;j<n;j++) { if(s[i][j]=='Y') { flag=0; memset(mark,0,sizeof(mark)); bfs(i,j); } else if(s[i][j]=='M') { flag=1; memset(mark,0,sizeof(mark)); bfs(i,j); } } for(i=0;i<m;i++) for(j=0;j<n;j++) if(s[i][j]=='@' && min>dis[i][j][0]+dis[i][j][1]) min=dis[i][j][0]+dis[i][j][1]; printf("%d\n",min*11); } return 0;}
0 0
- hdu 2612 bfs 广搜 距离和的最小值
- Bfs广搜 HDU - 2612
- HDU 1180 诡异的楼梯【BFS广搜+优先队列】
- HDU-2612--Find a way---BFS广搜
- HDU 2102 A计划【BFS广搜】
- bfs广搜 胜利大逃亡 HDU
- 图的遍历-深搜(DFS)和广搜(BFS)
- HDU-1026 Ignatius and the Princess I(BFS) 带路径的广搜
- HDU 2612 Find a way BFS广搜 且行且珍惜——
- bfs(广搜)
- G - BFS广搜
- 广搜模版BFS
- 【bfs(广搜)模板】
- BFS广搜——hdu 4255 A Famous Grid
- HDU 1254 推箱子 推箱子BFS广搜
- hdu 2717 Catch That Cow(广搜bfs)
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- HDU 1372 Knight Moves(广搜BFS)
- 3Dmax无法安装
- BP神经网络的数学原理及其算法实现
- C语言快速排序算法
- arm入门
- 标签a没有href属性
- hdu 2612 bfs 广搜 距离和的最小值
- NYOJ 会场安排问题
- 二月的最后一天-吃完火锅回来
- 我的几篇博客(补充简历专用)
- win10系统取消打开应用提示
- Activity/View/Window/Layout 之间的关系分析
- Java 运算符之 & | ~ ^
- Java生成RSA非对称型加密的公钥和私钥
- JDBC基础知识总结