设为首页 加入收藏

TOP

HDU 3152 Obstacle Course(优先队列)
2015-07-20 17:19:40 来源: 作者: 【 】 浏览:3
Tags:HDU 3152 Obstacle Course 优先 队列
Problem Description
\

You are working on the team assisting with programming fZ??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vciB0aGUgTWFycyByb3Zlci4gVG8gY29uc2VydmUgZW5lcmd5LCB0aGUgcm92ZXIgbmVlZHMgdG8gZmluZCBvcHRpbWFsIHBhdGhzIGFjcm9zcyB0aGUgcnVnZ2VkIHRlcnJhaW4gdG8gZ2V0IGZyb20gaXRzIHN0YXJ0aW5nIGxvY2F0aW9uIHRvIGl0cyBmaW5hbCBsb2NhdGlvbi4gVGhlIGZvbGxvd2luZyBpcyB0aGUgZmlyc3QgYXBwcm94aW1hdGlvbgogZm9yIHRoZSBwcm9ibGVtLjxicj4KPGJyPgo8Y2VudGVyPjxpbWcgc3JjPQ=="https://www.cppentry.com/upload_files/article/49/1_ac9yl__.jpg" alt="\">
N * N square matrices contain the expenses for traversing each individual cell. For each of them, your task is to find the minimum-cost traversal from the top left cell [0][0] to the bottom right cell [ N-1][ N-1]. Legal moves are up, down, left, and right; that is, either the row index changes by one or the column index changes by one, but not both.

Input Each problem is specified by a single integer between 2 and 125 giving the number of rows and columns in the N * N square matrix. The file is terminated by the case N = 0.

Following the specification of N you will find N lines, each containing N numbers. These numbers will be given as single digits, zero through nine, separated by single blanks.

Output Each problem set will be numbered (beginning at one) and will generate a single line giving the problem set and the expense of the minimum-cost path from the top left to the bottom right corner, exactly as shown in the sample output (with only a single space after "Problem" and after the colon).

Sample Input
3
5 5 4
3 9 1
3 2 7
5
3 7 2 0 1
2 8 0 9 1
1 2 1 8 1
9 8 9 2 0
3 6 5 1 5
7
9 0 5 1 1 5 3
4 1 2 1 6 5 3
0 7 6 1 6 8 5
1 1 7 8 3 2 3
9 4 0 7 6 4 1
5 8 3 2 4 8 3
7 4 8 4 8 3 4
0

Sample Output
Problem 1: 20
Problem 2: 19
Problem 3: 36

Source 2008 ACM-ICPC Pacific Northwest Region

给你一副N*N的地图。

从左上角走到右下角,所经路程的最小花费。(数字即是花费)

因为不是求最短路径,而是求最少的花费。

可以用优先队列,花费小的优先级高。加上BFS,开个flag数字记录任意点的花费。

每次不断的更新flag数组的值,因为优先队列,每次弹出来的必然是优先级最高的(花费少的)

上代码

#include 
  
   
#include
   
     #include 
    
      #include 
     
       using namespace std; int n; int map[130][130]; int flag[130][130]; //记录到任意点的花费。 int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; #define inf 0x6fffff struct node { int x,y; int cost; friend bool operator<(node a,node b) { return a.cost>b.cost; //优先队列,定义优先级,花费小的优先。 } } ; bool check(int x,int y) { if(x>=n ||y>=n ||x<0||y<0 ) return 0; return 1; } int bfs(int x,int y) { int i; node st,ed; priority_queue
      
       q; //优先队列 st.x=x; st.y=y; st.cost=map[0][0]; memset(flag,-1,sizeof(flag)); q.push(st); while(!q.empty()) { st=q.top(); //每次出来的都是最小的花费。 q.pop(); for(i=0;i<4;i++) { ed.x=st.x+dir[i][0]; ed.y=st.y+dir[i][1]; if(!check(ed.x,ed.y))//排除越界就够了,不用排除已经访问的,可以走回头路的,反正要遍历整个地图。 continue; ed.cost=st.cost+map[ed.x][ed.y]; if(ed.cost
        
        


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Codeforces 513C Second price au.. 下一篇hdu 1087 Super Jumping! Jumping..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·【C语言】动态内存管 (2025-12-27 06:23:20)
·C语言中的内存管理 - (2025-12-27 06:23:16)
·C语言指南:C语言内 (2025-12-27 06:23:14)
·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)