码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-04-08 21:38:16      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:

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

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 }

 

 

 

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

标签:

原文地址:http://www.cnblogs.com/A-FM/p/5369854.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!