hdu1026

来源:互联网 发布:北京学软件测试 编辑:程序博客网 时间:2024/05/22 07:42

进bfs了。。。

蒟蒻的自我拯救。。。

#include<cstdio>  #include<cstring>  #include<queue>  using namespace std;    int mak[110][110];  int d[4][2]={1,0,-1,0,0,-1,0,1};  int t,n,m;    struct node  {      int x,y,time;      friend int operator<(node a,node b)      {          return a.time>b.time;      }  };  struct out  {      char c;      int lx,ly,fight;  }map[110][110];    /* struct cmp {     bool operator()(const node &a,const node &b)     {         return a.time>b.time;     } }; */    priority_queue<node> q;  bool find(node first)  {        node now,next;      while(!q.empty())q.pop();      if(map[first.x][first.y].c>='0'&&map[first.x][first.y].c<='9')      {          map[first.x][first.y].fight=map[first.x][first.y].c-'0';          first.time=map[first.x][first.y].fight;      }      else first.time=0;      q.push(first);      while(!q.empty())      {          now=q.top();          q.pop();          if(now.x==0&&now.y==0)          {              t=now.time;              return true;          }          for(int i=0;i<4;++i)          {              next.x=now.x+d[i][0];              next.y=now.y+d[i][1];              if(next.x<0||next.y<0||next.x==n||next.y==m||map[next.x][next.y].c=='X'||mak[next.x][next.y]) continue;              mak[next.x][next.y]=1;              next.time=now.time+1;              if(map[next.x][next.y].c>='0'&&map[next.x][next.y].c<='9')              {                  map[next.x][next.y].fight=map[next.x][next.y].c-'0';                  next.time+=map[next.x][next.y].fight;              }              map[next.x][next.y].lx=now.x;              map[next.x][next.y].ly=now.y;              q.push(next);          }      }      return false;  }    int main()  {      node first;   //   freopen("F://cs.txt","r",stdin);      while(scanf("%d%d",&n,&m)!=EOF)      {          getchar();          memset(mak,0,sizeof(mak));          for(int i=0;i<n;++i)          {              for(int j=0;j<m;++j)              {                  scanf("%c",&map[i][j].c);                  map[i][j].fight=0;              }              getchar();          }          first.x=n-1;          first.y=m-1;          first.time=0;          if(find(first))          {              printf("It takes %d seconds to reach the target position, let me show you the way.\n",t);              int k=1,x=0,y=0;              int nx,ny;              while(k<=t)              {                  nx=map[x][y].lx,ny=map[x][y].ly;                  printf("%ds:(%d,%d)->(%d,%d)\n",k++,x,y,nx,ny);                  while(map[nx][ny].fight)                  {                      printf("%ds:FIGHT AT (%d,%d)\n",k++,nx,ny);                      --map[nx][ny].fight;                  }                  x=nx;y=ny;              }          }          else puts("God please help our poor hero.");          puts("FINISH");      }      return 0;  }  

0 0
原创粉丝点击