zoukankan      html  css  js  c++  java
  • hdu 2425 Hiking Trip

    优先队列+bfs

    AC Code
      1 #include <cstdio>
      2 #include <cstring>
      3 #include <algorithm>
      4 using namespace std;
      5 int vis[25][25];
      6 int map[25][25],tmp[25][25];
      7 int k;
      8 int x1,y1,x2,y2,r,c;
      9 struct 
     10 {
     11     int x,y,val;
     12 }a[505];
     13 void down()
     14 {
     15     int  x=a[k].x,y=a[k].y,val=a[k].val,i=1,j=2;
     16     k--;
     17     while(j<=k){
     18         if(a[j].val>a[j+1].val&&j+1<=k)
     19         j++;
     20         if(val>a[j].val){
     21             a[i].x=a[j].x;
     22             a[i].y=a[j].y;
     23             a[i].val=a[j].val;
     24             i=j;
     25             j=2*i;
     26         }
     27         else
     28         break;
     29     }
     30     a[i].x=x;
     31     a[i].y=y;
     32     a[i].val=val;
     33 }
     34 void up()
     35 {
     36     int i=k,x=a[k].x,y=a[k].y,val=a[k].val;
     37     while(i>1){
     38         if(a[i/2].val>val){
     39             a[i].x=a[i/2].x;
     40             a[i].y=a[i/2].y;
     41             a[i].val=a[i/2].val;
     42             i/=2;
     43         }
     44         else
     45         break;
     46     }
     47     a[i].x=x;
     48     a[i].y=y;
     49     a[i].val=val;
     50 }
     51 void bfs()
     52 {
     53     if(vis[x2][y2]==1||k==0)
     54     return;
     55     int x=a[1].x,y=a[1].y,val=a[1].val;
     56     if(vis[x-1][y]==0&&x-1>=0){
     57         map[x-1][y]=val+map[x-1][y];
     58         vis[x-1][y]=1;
     59         a[++k].x=x-1;
     60         a[k].y=y;
     61         a[k].val=map[x-1][y];
     62         up();
     63     }
     64     if(vis[x+1][y]==0&&x+1<r){
     65         map[x+1][y]=val+map[x+1][y];
     66         vis[x+1][y]=1;
     67         a[++k].x=x+1;
     68         a[k].y=y;
     69         a[k].val=map[x+1][y];
     70         up();
     71     }
     72     if(vis[x][y-1]==0&&y-1>=0){
     73         map[x][y-1]=val+map[x][y-1];
     74         vis[x][y-1]=1;
     75         a[++k].x=x;
     76         a[k].y=y-1;
     77         a[k].val=map[x][y-1];
     78         up();
     79     }
     80     if(vis[x][y+1]==0&&y+1<c){
     81         map[x][y+1]=val+map[x][y+1];
     82         vis[x][y+1]=1;
     83         a[++k].x=x;
     84         a[k].y=y+1;
     85         a[k].val=map[x][y+1];
     86         up();
     87     }
     88     down();
     89     bfs();
     90 }
     91 int main()
     92 {
     93     int cas=1;
     94     while(~scanf("%d%d",&r,&c)){
     95         int p,s,t;
     96         char op;
     97         scanf("%d%d%d",&p,&s,&t);
     98         getchar();
     99         memset(vis,0,sizeof(vis));
    100         for(int i=0;i<r;i++){
    101         for(int j=0;j<c;j++){
    102             scanf("%c",&op);
    103             if(op=='T')
    104             map[i][j]=t;
    105             else if(op=='.')
    106             map[i][j]=s;
    107             else if(op=='#')
    108             map[i][j]=p;
    109             else{
    110             map[i][j]=-1;
    111             vis[i][j]=1;
    112             }
    113             tmp[i][j]=map[i][j];
    114         }
    115             getchar();
    116         }
    117         scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    118         printf("Case %d: ",cas++);
    119         if(vis[x2][y2]==1){
    120             printf("-1\n");
    121             continue;
    122         }
    123         vis[x1][y1]=1;
    124         k=1;
    125         a[1].x=x1;
    126         a[1].y=y1;
    127         a[1].val=map[x1][y1];
    128         bfs();
    129         if(vis[x2][y2]==0)
    130         printf("-1\n");
    131         else
    132         printf("%d\n",map[x2][y2]-tmp[x1][y1]);
    133     }
    134     return 0;
    135 }
  • 相关阅读:
    如何添加“写字板”打开方式
    UML类图聚集与组合的区别
    系统调用跟驱动程序中相应函数的参数对应关系
    PHP 判断数据类型
    PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)
    java 中的内部类总结
    cross-env使用笔记
    MySQL——约束(constraint)详解
    MySQL数据库--外键约束及外键使用
    Java中Lambda表达式的使用
  • 原文地址:https://www.cnblogs.com/kim888168/p/2947189.html
Copyright © 2011-2022 走看看