Chinaunix首页 | 论坛 | 博客
  • 博客访问: 97973
  • 博文数量: 21
  • 博客积分: 145
  • 博客等级: 入伍新兵
  • 技术积分: 250
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-22 17:37
文章分类

全部博文(21)

文章存档

2013年(16)

2012年(5)

我的朋友

分类: C/C++

2013-03-25 16:33:25

题目:滑雪
链接:

思路:先对所有的高度升序排列,然后从最低点开始遍历整幅地图,考察当前点(x, y)四周的四个点,如果他们的路径长度
小于当前点路径+1,那么就更新该点的路径为 length[x][y] + 1。 思路很简单,初始化路径长度全为1,就可以了。


源码:

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <cstdlib>

  3. using namespace std;

  4. struct Node {
  5.     int h;
  6.     int x;
  7.     int y;
  8. };

  9. #define MAX 10000
  10. #define ROW 100
  11. #define COL 100

  12. Node list[MAX];
  13. int length[ROW][COL];
  14. int land[ROW][COL];

  15. int row, col;

  16. int cmp(const void *a, const void *b) {
  17.     return ((Node*)a)->h - ((Node*)b)->h;
  18. }

  19. void init() {
  20.     for (int i=0; i<row; i++) {
  21.         for (int j=0; j<col; j++) {
  22.             cin >> land[i][j];
  23.             int id = i*col + j;
  24.             list[id].h = land[i][j];
  25.             list[id].x = i;
  26.             list[id].y = j;
  27.             length[i][j] = 1;
  28.         }
  29.     }
  30.     qsort(list, row*col, sizeof(Node), cmp);
  31. }

  32. int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
  33. int findMaxLength() {
  34.     int maxLength = 1;
  35.     for (int n=0; n<row*col; n++) {
  36.         for (int i=0; i<4; i++) {
  37.             int x = list[n].x + dir[i][0];
  38.             int y = list[n].y + dir[i][1];
  39.             if (x>=0 && x<row && y>=0 && y<col) {
  40.                 int curLen = length[list[n].x][list[n].y];
  41.                 if (land[x][y]>list[n].h && curLen+1>length[x][y]) {
  42.                     length[x][y] = curLen + 1;
  43.                     if (length[x][y] > maxLength)
  44.                         maxLength = length[x][y];
  45.                 }
  46.             }
  47.         }
  48.     }
  49.     return maxLength;
  50. }

  51. int main() {
  52.     while (cin >> row >> col) {
  53.         init();
  54.         cout << findMaxLength() << endl;
  55.     }
  56.     return 0;
  57. }

阅读(230) | 评论(0) | 转发(0) |
0

上一篇:POJ2255

下一篇:POJ3624

给主人留下些什么吧!~~