栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3103 Cliff Climbing

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3103 Cliff Climbing

#include"stdio.h"#include"string.h"#include"vector"#include"queue"#include"iostream"#include"algorithm"using namespace std;#define N 105const int inf=(int)1e10;int w,h,ans;char e[N][N];       int mark1[N][N],mark2[N][N];  struct node{    int x,y,t,f;     };bool judge(int x,int y)     {    if(x>=0&&x<h&&y>=0&&y<w&&e[x][y]!='X')        return true;    return false;}int min(int a,int b){    return a<b?a:b;}void spfa(){    int i,j,x,y,u,v;    queue<node>q;    node cur,next;    cur.t=0;    for(i=0;i<h;i++)       {        for(j=0;j<w;j++)        { if(e[i][j]=='S') {     cur.x=i;     cur.y=j;     cur.f=-1;     q.push(cur);     cur.f=1;     q.push(cur);     mark1[i][j]=mark2[i][j]=0; }        }    }    while(!q.empty())    {        cur=q.front();        q.pop();        x=cur.x;        y=cur.y;        if(cur.f==1)        { next.f=-1; for(i=-2;i<=2;i++) {     for(j=-3;j<=-1;j++)     {         if(abs(i)+abs(j)<=3)         {  u=x+i;v=y+j;  if(judge(u,v))  {      if(e[u][v]=='T')      {          ans=min(ans,cur.t);          continue;      }      next.t=cur.t+e[u][v]-'0';      if(next.t>=mark1[u][v])          continue;      next.x=u;      next.y=v;      mark1[u][v]=next.t;      q.push(next);  }         }     } }        }        if(cur.f==-1)        { next.f=1; for(i=-2;i<=2;i++) {     for(j=1;j<=3;j++)     {         if(abs(i)+abs(j)<=3)         {  u=x+i;v=y+j;  if(judge(u,v))  {      if(e[u][v]=='T')      {          ans=min(ans,cur.t);          continue;      }      next.t=cur.t+e[u][v]-'0';      if(next.t>=mark2[u][v])          continue;      next.x=u;      next.y=v;      mark2[u][v]=next.t;      q.push(next);  }         }     } }        }    }}int main(){    int i,j;    while(scanf("%d%d",&w,&h),w||h)    {        for(i=0;i<h;i++)        { for(j=0;j<w;j++) {     cin>>e[i][j];     mark1[i][j]=mark2[i][j]=inf; }        }        ans=inf;        spfa();        if(ans>=inf) printf("-1n");        else printf("%dn",ans);    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372035.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号