8.6胖胖的牛牛(每日一题)

人言可畏,人言何所谓 人言可畏,人言何所谓 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

 

#include<bits/stdc++.h>
using namespace std;

typedef pair<int ,int >PII;
const int maxn=1e5;
const int max1=105;
int dx[4]= {1,0,-1,0},dy[4]= {0,1,0,-1};
int dist[maxn];
vector<int>edges[maxn];
char mp[max1][max1];
bool vis[maxn];
int e[maxn],ne[maxn],h[maxn],w[maxn],idx;
int st,ed;
map<pair<int ,int >,int >mo;
int ans=0x3f3f3f3f,cnt=1;

void add(int a,int b,int c)
{
    e[idx]=b;w[idx]=c;ne[idx]=h[a];h[a]=idx++;
}

void dijkstra(int start)
{
    memset(dist, 0x3f,sizeof dist);     //初始化距离  0x3f代表无限大
    memset(vis, false,sizeof vis);

    dist[start]=0;  //第一个点到自身的距离为0

    priority_queue<PII,vector<PII>,greater<PII>>mo;

    mo.push({0,start});
    while(mo.size())
    {
        auto t=mo.top();
        mo.pop();
        int ver=t.second,distance=t.first;
        if(vis[ver]) continue;
        vis[ver]=1;
        for(int i=h[ver];i!=-1;i=ne[i])
        {
            int j=e[i];
            if(dist[j]>w[i]+distance)
            {
                 dist[j]=w[i]+distance;
                 mo.push({dist[j],j});
            }
        }

    }

    for(int dd=0;dd<=3;dd++)
    {
        ans=min(dist[ed+dd],ans);
    }

}

int main()
{
    int n,m,i,j,t;
    memset(h,-1,sizeof h);
    cin>>n;getchar();
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            cin>>mp[i][j];
            int x1=i,x2=j;
            if(x1<0||x1>=n||x2<0||x2>=n||mp[x1][x2]=='x') continue;
            if(mp[i][j]=='A') st=cnt;
            if(mp[i][j]=='B') ed=cnt;
            mo[{x1,x2}]=cnt;
            cnt+=4;
        }
    }

    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(mp[i][j]=='x') continue;

            for(int k=0;k<4;k++)
            {
                int x1=i+dx[k],x2=j+dy[k];
                if(x1<0||x1>=n||x2<0||x2>=n||mp[x1][x2]=='x') continue;
                int d1=mo[{i,j}],d2=mo[{x1,x2}];
                for(int dd=0;dd<=3;dd++)
                {
                    int xx=d1+dd,yy=d2+k;
                    if(dd==k)add(xx,yy,0),add(yy,xx,0);
                    else add(xx,yy,1),add(yy,xx,1);
                }
            }
        }
    }

    for(int dd=0;dd<=3;dd++)
    {
        int bh=st+dd;
        dijkstra(bh);
    }

    if(ans==0x3f3f3f3f){
        cout<<-1<<endl;
    }
    else {
        cout<<ans<<endl;
    }
    return 0;
}

...全文

相关推荐

牛牛数据处理器牛牛数据处理器

牛牛数据处理器牛牛数据处理器牛牛数据处理器

cxypy

牛牛数据处理器

牛牛数据处理器 C3 是免费版本 免费的原因是本人身体不好,需要多休息,就把GOOGLE广告和软件注册二项有收入的砍掉, 只留下网投一项操作,软件回答今后只对原注册用户和网投客户负责,服务不周还请各位谅解 软件使用交流论坛地址:www.nn1133.com 或 www.nn1133.cn C3是原C2的基础上拆掉硬件检测代码而来,今后在C3平台上继续改进 由于论坛上传附件大小限于2M,软件的使用帮助部分请另外下载,解压后放进“使用帮助”文件夹里

qq_21546795

牛牛播放器v8.9官方正式安装版

牛牛播放器是一款接过了某播的责任为广大宅男们造福,播放流畅、完全免费,是宅男宅女必备的视频播放器。 软件特色 免费 完全免费,下载直接运行后即可观看 流畅 播放流畅P2P传输,越多人看越流畅 灵活 具有灵活点播的功能,随点随看,时间自由掌握 丰富 海量电影、欧美片、日韩片、国内片高清播放 方便 软件占用空间极小,方便自由收藏 个性 支持全屏播放或设置,满足您个性偏好

weixin_39840387

牛牛算法java版,包含牛牛算法 结算配置自定义等,里面有测试类

包含牛牛算法 结算配置自定义等,里面有测试类,包含牛牛算法 结算配置自定义等,里面有测试类包含牛牛算法 结算配置自定义等,里面有测试类包含牛牛算法 结算配置自定义等,里面有测试类包含牛牛算法 结算配置自定义等,里面有测试类

wzh154710510

6人通比牛牛+机器人+库存 代码

[通比牛牛] //刷新房间配置 Refresh= 1 ;是否刷新配置 //库存更新 RefreshStorage = 0 ;是否刷新库存 //胜率控制 WinRate=50 ;胜率控制 (1-100)数值越大胜率越高 推荐50-70 StorageStart=0 ;(库存起始值) StorageDeduct=0 ;(衰减值) StorageOff=0 StorageMax=1000 //机器人存款取款 RobotScoreMin=100000 ; 机器人的分数小于该值时执行取款 RobotScoreMax=1000000 ; 机器人的分数大于该值时执行存款 RobotBankGet=1000000 ; 取款最小数额(取款数是该值以上的一个随机数) RobotBankGetBanker=10000000 ; 取款最大数额(此数值一定要大于RobotBankGet) RobotBankStoMul=10 ; 存款百分比,百分之N Control=1 ;0 不控制 1 控制 Gameid=10000 Win=1 ;0 输 1:赢

qq419475243
评论
收藏 已收藏
分享
返回顶部