码迷,mamicode.com
首页 > 其他好文 > 详细

D. Journey(广搜)

时间:2019-12-12 01:22:23      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:--   题目   应该   ssi   判断   def   first   com   pop   

??

其实就是一个广搜能解决的问题,但是!!!不知道为啥,
自己码了个广搜还总是WA12,看不到样例哎呀好气。
这个题其实应该在广搜基础上多想一步,根据题目,最后走出来的路肯定是:城镇-----荒野----城镇----荒野,这样子,所以我们也不用判断走的每一步到底是啥,直接算总共多少步,然后ans/2是a,剩下的给b..

int n,m,a,b;
char s[555][555];
int dp[555][555];
int dx[]={0,0,-1,1},dy[]={1,-1,0,0};
int main()
{
    cin>>m>>n>>a>>b;
    rep(i,n) cin>>s[i];
    rep(i,n)  rep(j,m) dp[i][j]=-1;
    queue<pii>q;q.push(make_pair(0,0));
    dp[0][0]=0;
    while(q.size())
    {
        pii xx=q.front();q.pop();
        if(xx.first==n-1&&xx.second==m-1) break;
        rep(k,4)
        {
            int nx=xx.first+dx[k],ny=xx.second+dy[k];
            if(nx<0||nx>=n||ny<0||ny>=m||s[nx][ny]=='#') continue;
            s[nx][ny]='#';
            dp[nx][ny]=dp[xx.first][xx.second]+1;
            q.push(make_pair(nx,ny));
        }
    }
    int ans=dp[n-1][m-1];
    if(ans==-1) cout<<"IMPOSSIBLE\n";
    else cout<<a*(ans/2)+b*(ans-ans/2)<<endl;
    return 0;
}

D. Journey(广搜)

标签:--   题目   应该   ssi   判断   def   first   com   pop   

原文地址:https://www.cnblogs.com/Herlo/p/12026572.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!