hdu 2354(bfs求最短路)
来源:互联网 发布:基本款斜挎包 知乎 编辑:程序博客网 时间:2024/05/17 07:19
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2354
思路:初始化step[][]==inf,然后如果当前点p.step<step[p.x][p.y],则入优先队列。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<queue> 6 using namespace std; 7 #define inf 1<<30 8 struct Node{ 9 int x,y,step;10 bool operator < (const Node &p) const {11 return p.step<step;12 }13 };14 int n,m;15 int Step[22][22];16 char map[22][22];17 int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};18 19 int bfs(){20 for(int i=1;i<=n;i++)21 for(int j=1;j<=m;j++)22 Step[i][j]=inf;23 priority_queue<Node>Q;24 Node p,q;25 for(int i=1;i<=m;i++){26 p.x=1,p.y=i,p.step=1;27 Q.push(p);28 }29 while(!Q.empty()){30 p=Q.top();31 Q.pop();32 if(p.x==n)return p.step;33 for(int i=0;i<4;i++){34 q.x=p.x+dir[i][0];35 q.y=p.y+dir[i][1];36 q.step=p.step;37 if(q.x<1||q.x>n||q.y<1||q.y>m)continue;38 if(map[q.x][q.y]!=map[p.x][p.y])q.step++;39 if(Step[q.x][q.y]>q.step){40 Step[q.x][q.y]=q.step;41 Q.push(q);42 }43 }44 }45 return 1;46 }47 48 int main(){49 // freopen("1.txt","r",stdin);50 int _case;51 scanf("%d",&_case);52 while(_case--){53 scanf("%d%d",&n,&m);54 for(int i=1;i<=n;i++)55 scanf("%s",map[i]+1);56 int ans=bfs();57 printf("%d\n",ans);58 }59 return 0;60 }
0 0
- hdu 2354(bfs求最短路)
- hdu 3760(2次bfs求最短路)
- hdu 1242 用bfs求最短路
- POJ2251(BFS求最短路)
- POJ 3170(bfs求最短路)
- HDU 1495 非常可乐 (BFS求最短路)
- 魔戒-BFS求最短路
- UVALive7015(bfs求最短路)
- hdu 2416 Treasure of the Chimp Island(bfs求最短路)
- hdu 4771 求一点遍历所有给定点的最短路(bfs+dfs)
- hdu 2544 最短路 (diskstra求最短路)
- HDU 4171 bfs&&最短路
- hdu 1245(最短路+bfs)
- hdu 1548 最短路||bfs
- UVA816(用BFS求最短路)(wf)
- uva439 - Knight Moves(BFS求最短路)
- [容易] BFS求最短路(迷宫类问题)
- 独轮车,白书P308Uva10047(BFS求最短路)
- hdu 4313(类似于kruskal)
- hdu 4296(贪心)
- hdu 4311(枚举)
- hdu 2831(贪心)
- hdu 2819(二分匹配)
- hdu 2354(bfs求最短路)
- hdu 4324(dfs)
- hdu 2376(求树上任意两点之间距离之和的平均值)
- MFC编程之全局唯一标识符(GUID,Globally Unique Identifier)
- hdu 2444(二分图的判断以及求最大匹配)
- hdu 3665(最短路)
- 转:只有程序员才有的十大烦恼
- hdu 4463(最小生成树变形)
- hdu 1827(强联通缩点建图)