Swapping Places题解

认识的动物可以交换,找出其中字典序最小的一种排列
思路:思路就是拓扑排序
先把所有的动物名称进行排序,用他们的位置代表他们的名称,然后算出哪些是朋友,核心部分就是对每个字符串进行处理,对每个位置的动物进行处理实际上就是把每种动物都看成一个点,可以交换的就看成两个点之间有一条边,然后跑一边拓扑排序就出来。

 for(int i=1;i<=l;i++)
    {
   
        int cnt=0;
        for(int j=1;j<=n;j++)
        {
   
            if(!vis[pos[i]][j])
            {
   
                cnt+=sum[j];
            }
        }
        vt[pos[i]].push_back(cnt);//把每个字符串看成一条边,
        sum[pos[i]]++;//这个点前面有多少个点进行了计算
    }

拓扑排序

for(int i=1;i<=l;i++)
        for(int j=1;j<=n;j++)
            if(pos2[j]<vt[j].size())//如果大于证明跟j朋友关系的点已经算完了
            if(vt[j][pos2[j]]==num[j])//相当于当这个点为0的时候,前面的都计算完了,到这个点入列
            {
   
                pos2[j]++;
                p
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值