Sorting It All Out 拓扑排序+确定点

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

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

 

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

 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 }
时间: 2024-10-23 06:04:34

Sorting It All Out 拓扑排序+确定点的相关文章

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

nyoj349   http://acm.nyist.net/JudgeOnline/problem.php?pid=349poj1094   http://poj.org/problem?id=1094这两个题是一样的,不过在poj上A了才算真的过,ny上数据有一点弱. 题目大意输入n,m. 一共有n个字母(从A开始), m行语句每个语句“x﹤y”,说明x,y之间的偏序关系.让你判断是否可以通过这些关系得到一个唯一的升序序列,若能则输出这个序列并指出通过前多少条语句得出的,如果n个字母间存在矛

nyoj Sorting It All Out (拓扑排序)

三种情况分别是: 1. 在某位置可以确定拓扑排序. 2. 在某位置出现了环 3. 到最后都不能确定拓扑排序(某一位置入度为0的点有多个),可以续输入执行下去. 每输入一组数据都要做一次判断 1 #include<cstdio> 2 #include<cstring> 3 #include<vector> 4 #include<queue> 5 using namespace std; 6 const int N = 105; 7 int n, m, in[N

POJ 1094 Sorting It All Out 拓扑排序

Sorting It All Out Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%lld & %llu Description An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to

POJ1094 Sorting It All Out 拓扑排序(深搜)

题意:给定n和m,n表示大写字母的前n个,m表示m个关系对,求能否确定唯一排序. 分析:分三种情况 (1)当输入完当前的关系对之后,已经能确定矛盾(不需要完全输入m个关系对时) eg. 3 3       A<B       B<A         B<C       当输入到第二对已经能判断矛盾,此时记下当前的所需要用到的关系对数ans=2:       接着输入,但是后面的关系对不作处理 (2) 当输入完当前的关系对之后,已经能确定唯一排序(不需要完全输入m个关系对,    但是必须

zoj 1060 Sorting It All Out(拓扑排序)

#include<bits/stdc++.h> using namespace std; vector< vector<char> >v; int n,m,use[30],cnt[30]; char ans[30],s[10]; int topsort(int x) { int i,j,t[30],f=1,r,c; memset(ans,0,sizeof(ans)); for(i=0; i<30; i++) t[i]=cnt[i]; c=0; r=0; while

Sorting It All Out (拓扑排序+思维)

An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For example, the sorted sequence A, B, C, D implies that A < B, B < C and C < D. in this pro

[ACM] POJ 1094 Sorting It All Out (拓扑排序)

Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26801   Accepted: 9248 Description An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from sm

POJ 1094 Sorting It All Out【floyd传递闭包+拓扑排序】

Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31994 Accepted: 11117 Description An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from small

hdu 5195 DZY Loves Topological Sorting BestCoder Round #35 1002 [ 拓扑排序 + 优先队列 || 线段树 ]

传送门 DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 221    Accepted Submission(s): 52 Problem Description A topological sort or topological ordering of a directed