hdu 3152 Obstacle Course (bfs)
2014-10-07 19:32
295 查看
//从0 0到n-1 n-1位置 最小消耗,走到i,j位置需要消耗a[i][j] //可以走四个方向 #include <stdio.h> #include <string.h> #include <algorithm> #include <math.h> #include <queue> # define inf 999999999 using namespace std; int n; int dp[150][150]; int a[150][150]; int dir[4][2]= {{-1,0},{0,1},{1,0},{0,-1}}; bool judge(int x,int y) { if(x<0||y<0||x>=n||y>=n) return false; return true; } void slove() { int i,j; int fx,fy,dx,dy; for(i=0; i<n; i++) for(j=0; j<n; j++) dp[i][j]=inf; dp[0][0]=a[0][0]; queue<int>qx; queue<int>qy; qx.push(0); qy.push(0); while(!qx.empty()&&!qy.empty()) { fx=qx.front(); fy=qy.front(); qx.pop(); qy.pop(); for(i=0; i<4; i++) { dx=fx+dir[i][0]; dy=fy+dir[i][1]; if(judge(dx,dy)&&dp[dx][dy]>dp[fx][fy]+a[dx][dy]) { dp[dx][dy]=dp[fx][fy]+a[dx][dy]; qx.push(dx); qy.push(dy); } } } } int main() { int cas=0; while(~scanf("%d",&n),n) { for(int i=0; i<n; i++) for(int j=0; j<n; j++) scanf("%d",&a[i][j]); slove(); printf("Problem %d: %d\n",++cas,dp[n-1][n-1]); } return 0; }
相关文章推荐
- HDU--3152Obstacle Course【BFS】
- HDU 3152 Obstacle Course(BFS+优先队列 重载)
- HDOJ 题目3152 Obstacle Course(BFS,优先队列优化)
- hdu 3152 Obstacle Course
- HDU 3152 Obstacle Course
- HDU 3152 Obstacle Course (BFS+优先队列)
- 1703. Obstacle Course(最短路径bfs)
- bzoj 3393 && bzoj 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(BFS)
- bzoj 1644: Obstacle Course 障碍训练课 BFS
- HDU3152 Obstacle Course(BFS)
- 【BZOJ】1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(bfs)
- BZOJ 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课( BFS )
- HDU 1242 Rescue (第一道优先队列+BFS)
- HDU 1372 Knight Moves(bfs)
- HDU 1253 胜利大逃亡(BFS)
- hdu 2102 A计划(bfs)
- HDU 1495 非常可乐 BFS搜索
- HDU 2612 Find a way (两次bfs)
- hdu 1185 Open the Lock 简单bfs
- hdu 1973+hdu 2364+hdu 2416+hdu 2822+hdu 2645(bfs)