这一道题的话  数据有一点问题    ........     例如 不过 还是   能理解一下  试试吧  .........

3 5
A<B
B<C
C<A
A<C
B<A
这几组数据 明显反映出来  这是成环的    ,      然后  按照 输入输出案例来说 这个是 有序的   ABC 

 

题目要求     在每组数据的   第一行  给你需要排序 的 字母数    和  他们之间的关系数量      然后  输入每组数据    你首先许亚萍判断在输入  第几组 数据的时候 出现了 环     其次判断    到第几组关系的时候   可以确定唯一的序列  如果上面两个 都不行的话    就输出   第三种情况  不能确定  唯一 的   排序序列

内存越界.....醉了 . 明天看  睡觉觉

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<vector>
 8 #include<set>
 9 #include<stack>
10 #include<string>
11 #include<sstream>
12 #include<map>
13 #include<cctype>
14 using namespace std;
15 int n,m,a[30][30],visited[30],flag,fuck,mark,result[30],temp[30],count1,flag1;
16 void topsort(int q)
17 {
18     fuck=0;
19     for(int j=0;j<n;j++)
20         temp[j]=visited[j];   //
21     count1=0;
22     for(int i=1;i<=n;i++)         //   其实只是普通的  拓扑排序   重复化了一下而已   ...
23     {
24         fuck=mark=0;
25         for(int j=0;j<n;j++)
26         {
27             if(temp[j]==0)
28             {
29                 flag=j;
30                 mark++;
31             }
32         }
33         if(mark==0)
34         {
35             printf("Inconsistency found after %d relations.\n",q+1);
36             flag1=fuck=1;
37             break;
38         }
39         temp[flag]--;  //  找到了   flag  他没有儿子  / 现在  将他标记为 -1;
40         if(mark==1)
41         {
42             result[i]=flag;  //  将  该点储存起来
43             count1++;
44         }
45         for(int j=0;j<n;j++)   //  将 flag的 所有爸爸的 儿子数  -1
46         {
47             if(a[flag][j])
48             {
49                 temp[j]--;
50             }
51         }
52     }
53 }
54 int main()
55 {
56     while(scanf("%d%d",&n,&m),(n||m))
57     {
58         flag1=fuck=count1=mark=flag=0;
59         memset(visited,0,sizeof(visited));
60         memset(a,0,sizeof(a));
61         for(int i=0;i<m;i++)
62         {
63             char d,c,b;
64             scanf(" %c%c%c",&b,&d,&c);
65             if(flag1)
66                 continue;
67             a[b-'A'][c-'A']=1;   //     c 有一个叫做b 的儿子
68             visited[c-'A']++;        //  c 的 儿子 数量  ++
69             topsort(i);          //  第一次进去的时候 就相当于   只有一组的关系
70             if(fuck)
71                 ;
72             else
73             {
74                 if(count1==n)
75                 {
76                     printf("Sorted sequence determined after %d relations: ",i+1);
77                     for(int i=1;i<=n;i++)
78                         printf("%c",result[i]+'A');
79                     printf(".\n");
80                     flag1=1;
81                 }
82             }
83             if(!flag1&&i==m-1)
84             {
85                 printf("Sorted sequence cannot be determined.\n");
86                 flag1=1;
87             }
88         }
89     }
90     return 0;
91 }

 1 #include<stdio.h>
 2 #include<string.h>
 3 int map[27][27],indegree[27],q[27];
 4 int TopoSort(int n) //拓扑排序
 5 {
 6     int c=0,temp[27],loc,m,flag=1,i,j;  ////flag=1:有序 flag=-1:不确定
 7     for(i=1;i<=n;i++)
 8         temp[i]=indegree[i];
 9     for(i=1;i<=n;i++)
10     {
11         m=0;
12         for(j=1;j<=n;j++)
13             if(temp[j]==0) { m++; loc=j; }  //查找入度为零的顶点个数
14         if(m==0) return 0;  //有环
15         if(m>1) flag=-1;  // 无序
16         q[c++]=loc;   //入度为零的点入队
17         temp[loc]=-1;
18         for(j=1;j<=n;j++)
19             if(map[loc][j]==1) temp[j]--;
20     }
21     return flag;
22 }
23
24 int main()
25 {
26     int m,n,i,sign;  //当sign=1时,已得出结果
27     char str[5];
28     while(scanf("%d%d",&n,&m))
29     {
30         if(m==0&&n==0) break;
31         memset(map,0,sizeof(map));
32         memset(indegree,0,sizeof(indegree));
33         sign=0;
34         for(i=1;i<=m;i++)
35         {
36             scanf("%s",str);
37             if(sign) continue; //一旦得出结果,对后续的输入不做处理
38             int x=str[0]-'A'+1;
39             int y=str[2]-'A'+1;
40             map[x][y]=1;
41             indegree[y]++;
42             int s=TopoSort(n);
43             if(s==0) //有环
44             {
45                 printf("Inconsistency found after %d relations.\n",i);
46                 sign=1;
47             }
48             if(s==1) //有序
49             {
50                 printf("Sorted sequence determined after %d relations: ",i);
51                 for(int j=0;j<n;j++)
52                     printf("%c",q[j]+'A'-1);
53                 printf(".\n");
54                 sign=1;
55             }
56         }
57         if(!sign) //不确定
58             printf("Sorted sequence cannot be determined.\n");
59     }
60     return 0;
61 }

转载于:https://www.cnblogs.com/A-FM/p/5369854.html

Sorting It All Out 拓扑排序+确定点相关推荐

  1. POJ 1094 Sorting It All Out (拓扑排序)

    题意:给你一些大写字母间的偏序关系,然后让你判断能否唯一确定它们之间的关系,或者所给关系是矛盾的,或者到最后也不能确定它们之间的关系.   由DAG图节点的偏序关系确定节点的排序可以由拓扑排序求出.而 ...

  2. POJ - 1094 Sorting It All Out(拓扑排序+floyd传递闭包)

    题目链接:点击查看 题目大意:给出N个点以及M个比较关系,问在第几个数字可以确定出唯一的序列,或者判断出矛盾的序列,或者最后也无法确定出一个唯一的序列 题目分析:关于这个题目可以直接分类讨论,可以直接 ...

  3. nyoj349 poj1094 Sorting It All Out(拓扑排序)

    nyoj349   http://acm.nyist.net/JudgeOnline/problem.php?pid=349 poj1094   http://poj.org/problem?id=1 ...

  4. 拓扑排序(Topological Sorting)

    拓扑排序(Topological Sorting) 这篇文章我们来讲一下拓扑排序,这可是一个很重要也很实用的算法,面试中常考,工作中常用,无论是互联网公司还是金融公司,考算法的时候都贼喜欢问这个. 拓 ...

  5. 拓扑排序(Topological Sorting):Kahn 算法和 DFS 算法

    拓扑排序(Topological Sorting):Kahn 算法和 DFS 算法 Kahn 算法 DFS 算法 拓扑排序(TopoSort)有相当广泛的应用,比如依赖关系分析.图是否有环的检测.编译 ...

  6. 什么是拓扑排序(Topological Sorting)

    (文章引用于http://songlee24.github.io/2015/05/07/topological-sorting/) 一.什么是拓扑排序 在图论中,拓扑排序(Topological So ...

  7. 拓扑排序(topological sorting)介绍及Python实现

    目录 1. 拓扑排序 2. 拓扑排序存在的前提 3. 拓扑排序的唯一性问题 4. 拓扑排序算法原理 4.1 广度优先遍历 4.2 深度优先遍历 5. 代码实现 5.1 Graph类的实现 5.2 广度 ...

  8. POJ - 1094 Sorting It All Out(拓扑排序)

    https://vjudge.net/problem/POJ-1094 题意 对于N个大写字母,给定它们的一些关系,要求判断出经过多少个关系之后可以确定它们的排序或者排序存在冲突,或者所有的偏序关系用 ...

  9. Sorting It All Out (易错题+拓扑排序+有向图(判环+判有序)优先级)

    这道题目考察了拓扑排序的基本思想:每一步寻找一个入度为0的结点,然后 删除之.将这个结点指向的结点入度减1.删除从这个结点出发的所有边 同时考察了对于一个有向图是否有环.是否严格有序的判断.(当发现多 ...

最新文章

  1. NeurIPS 2020 :新一代算法“鉴黄师”诞生,中科院计算所研究生一作
  2. python求五个数中的最大值和最小值_python编程 求输入的10个数中的最大值和最小值,并输出它们各自是第几个...
  3. 性能php 教程,提高PHP性能效率的几个技巧
  4. 学习使用资源文件[2] - Ico
  5. com.alibaba.dubbo.rpc.RpcException: Forbid consumer 192.168.184.1 access service com.foreveross.syst
  6. 【计算机组成原理】Chapter1-复习题
  7. Redis 学习之事务处理
  8. 做技术的你,如果别人找你创业,该怎么办?
  9. 宝塔搭建PHP自适应懒人网址导航源码实测
  10. LwIP协议栈——网络接口管理
  11. C语言:复制线性链表(递归)算法
  12. 手机开发APP整体界面设计工具之墨刀---没用过就知道它很牛掰
  13. 关于 SQL Server Reporting Services 2012 匿名登录
  14. 经验说丨华为云视频Cloud Native架构下实践
  15. 骨传导与气传导技术联合,这款耳机有何出色之处?开箱体验走起
  16. 揭秘网站的seo技术 ---seo与seoer 王泽宾
  17. 学习笔记——VLSI测试方法学和可测性设计
  18. 为什么用python画图_怎么用python画图
  19. js文件中引入js的方法
  20. y=asin(wx+φ)的对称中心_函数y=Asin(wx+φ)图像和性质

热门文章

  1. scala中的构造方法和伴生对象
  2. spring aop抽取切点表达式
  3. Windows创建类似.project只有后缀名的文件的方法
  4. MySQL子查询优化思路
  5. windows 代理软件_一款强大的远程控制实用软件,分享给你……
  6. 创建azure服务器
  7. Coding: 2的N次方
  8. Qt工程生成xcode工程文件
  9. 【已解决】linux redhat 6 如何打开防火墙中的某个端口?例如:5900端口
  10. IP 地址编址方式(分类、子网划分、无分类)