首页 > 其他分享 >ACwing343.排序

ACwing343.排序

时间:2023-12-12 14:14:17浏览次数:38  
标签:return int ACwing343 st ++ printf 排序 type

1.Floyd写法:

#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 26;

int n, m;
bool d[N][N];
bool st[N];

int check()
{
    for (int i = 0; i < n; i ++ )
        if (d[i][i])
            return 2;

    for (int i = 0; i < n; i ++ )
        for (int j = 0; j < i; j ++ )
            if (!d[i][j] && !d[j][i])
                return 0;

    return 1;
}

char get_min()
{
    for (int i = 0; i < n; i ++ )
        if (!st[i])
        {
            bool flag = true;
            for (int j = 0; j < n; j ++ )
                if (!st[j] && d[j][i])
                {
                    flag = false;
                    break;
                }
            if (flag)
            {
                st[i] = true;
                return 'A' + i;
            }
        }
}

int main()
{
    while (cin >> n >> m, n || m)
    {
        memset(d, 0, sizeof d);

        int type = 0, t;
        for (int i = 1; i <= m; i ++ )
        {
            char str[5];
            cin >> str;
            int a = str[0] - 'A', b = str[2] - 'A';

            if (!type)
            {
                d[a][b] = 1;
                for (int x = 0; x < n; x ++ )
                {
                    if (d[x][a]) d[x][b] = 1;
                    if (d[b][x]) d[a][x] = 1;
                    for (int y = 0; y < n; y ++ )
                        if (d[x][a] && d[b][y])
                            d[x][y] = 1;
                }
                type = check();
                if (type) t = i;
            }
        }

        if (!type) puts("Sorted sequence cannot be determined.");
        else if (type == 2) printf("Inconsistency found after %d relations.\n", t);
        else
        {
            memset(st, 0, sizeof st);
            printf("Sorted sequence determined after %d relations: ", t);
            for (int i = 0; i < n; i ++ ) printf("%c", get_min());
            printf(".\n");
        }
    }

    return 0;
}

因为更新d数组的时候,两重循环都是从0到n-1,所以也可以这样写:

for (int x = 0; x < n; x ++ )
                {
                    if (d[x][a]) d[x][b] = 1;
                    for (int y = 0; y < n; y ++ )
                    {
                        if(d[b][y]) d[a][y] = 1;
                        if (d[x][a] && d[b][y])
                            d[x][y] = 1;
                    }
                        
                }

 

标签:return,int,ACwing343,st,++,printf,排序,type
From: https://www.cnblogs.com/smartljy/p/17896647.html

相关文章

  • [LeetCode Hot 100] LeetCode148. 排序链表
    题目描述思路一:堆排序、小顶堆定义一个最小堆将链表的所有节点放入一个最小堆中直接用队列弹出的最小值依次覆盖掉原链表的值方法一:/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}......
  • 1094. 拼车(差分&堆排序)
    Problem:1094.拼车文章目录题目思路Review差分数组定义区间加法减法更新差分数组:为啥这样更新思路1Code思路2Code题目车上最初有capacity个空座位。车只能向一个方向行驶(也就是说,不允许掉头或改变方向)给定整数capacity和一个数组trips,trip[i]=[numPassengersi,......
  • 拓扑排序实现循环依赖判断
    本文记录如何通过拓扑排序,实现循环依赖判断前言一般提到循环依赖,首先想到的就是Spring框架提供的Bean的循环依赖检测,相关文档可参考:https://blog.csdn.net/cristianoxm/article/details/113246104本文方案脱离SpringBean的管理,通过算法实现的方式,完成对象循环依赖的判断,涉......
  • 排序合并区间
    题目合并区间以数组intervals表示若干个区间的集合,其中单个区间为intervals[i]=[starti,endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。示例1:输入:intervals=[[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15......
  • MySQL 分组排序后 → 如何取前N条或倒数N条
    开心一刻晚上,老婆辅导女儿写语文作业填空题:春天来了,__绿了女儿:春天来了,爸爸绿了老婆一脸不悦地问道:你再说一遍,春天来了,什么玩意绿了?女儿:春天来了,爸爸绿了呀老婆很生气,但依旧温柔地问道:春天来了,爸爸怎么绿了呢女儿略带哭腔的说道:那冬天呢......
  • 【算法】【线性表】两个排序数组的中位数
    1 题目两个排序的数组A和B分别含有m和n个数,找到两个排序数组的中位数,要求时间复杂度应为O(log(m+n))。中位数的定义:这里的中位数等同于数学定义里的中位数。中位数是排序后数组的中间值。如果有数组中有n个数且n是奇数,则中位数为 A((n-1)/2)。如果有数组中有n个数且n......
  • 算法之快速排序5非递归实现
    一:概述绝大多数的递归逻辑都可以利用栈的方式去代替。代码中一层一层的方法调用,本身就是使用一个方法调用栈。每次进入一个新的方法,就相当于入栈。每次有方法返回就相当于出栈。所以,可以把原本的递归实现转换成一个栈的实现,在栈中存储每一次方法调用的参数。二:具体代码实现/*非......
  • 插入排序详解
    算法思想把数列分成两部分,前面部分为有序区,后面部分为无序区,初始时有序区只有一个元素,一个数字组成的数列当然是有序的;遍历无序区,把其中每个数不断地插入有序区,形成一个更大的有序区,遍历完成时整个数列也就有序了!学习过程思想(1)两层for循环,第一层for循环是无序区,第......
  • 【算法】【线性表】搜索旋转排序数组(有重复数据)
    1 题目跟进“搜索旋转排序数组”,假如有重复元素又将如何?是否会影响运行时间复杂度?如何影响?为何会影响?写出一个函数判断给定的目标值是否出现在数组中。样例1:输入:A=[]target=1输出:false 解释:数组为空,1不在数组中。样例2:输入:A=[3,4,4,5,7,0,1,2]t......
  • linux的sort排序功能
    环境centos7.9sort介绍Linux中的sort功能是一个非常实用的工具,它可以对文本文件进行排序。sort命令可以根据用户指定的规则对文本文件中的行进行排序,并将结果输出到标准输出或指定的文件中简单使用语法sort[选项][文件名]其中,选项可以是以下之一:-r:逆序排序(默认为升序)-n......