当前位置:网站首页>POJ 1094 sorting it all out
POJ 1094 sorting it all out
2022-07-06 22:33:00 【Full stack programmer webmaster】
Hello everyone , I meet you again , I'm the king of the whole stack .
The question : Given a series of relationships ( Only capital letters exist ), Infer whether there is contradiction ,
Or unable to determine the relationship . Or be able to determine the only relationship
analysis : Using topological sorting . But you need to sort while entering the relationship
contradiction : Infer whether there is a ring
Determine the relationship : Can find the unique topological order
Not sure about the relationship : There is no ring , And after all the relationships are processed , The relationship is still uncertain
notes : Suppose there is a contradiction , Then there is no need to infer the next relationship
#include<stdio.h>
#include<string.h>
int n,m,vis[30],rd[30],flag[30],map[30][30],cnt;
char t[30];
int tpsort()
{
int i,j,k,num,mark=1;
cnt=0;
memset(vis,0,sizeof(vis)); // Mark whether to access
for(i=0;i<n;i++)
if(flag[i]){
num=0;
for(j=0;j<n;j++) // The calculated penetration is 0 The number of
if(flag[j]&&!rd[j]&&!vis[j])
num++;
if(num==0) // If there is no penetration, it is 0 node , Then there are rings
return 0;
if(num>1) // If the degree of penetration is 0 Node of is greater than 1. It indicates that a unique topological relationship cannot be established
mark=0;
for(j=0;j<n;j++){
if(flag[j]&&!rd[j]&&!vis[j]){
t[cnt++]=j+'A';
vis[j]=1;
break;
}
}
for(k=0;k<n;k++)
if(map[j][k])
rd[k]--;
}
if(!mark)
cnt=0;
return 1;
}
int main()
{
int i,j,mark,pos,r[30];
char s[5];
while(scanf("%d%d",&n,&m)!=EOF){
if(m==0&&n==0)
break;
mark=1;
memset(map,0,sizeof(map));
memset(flag,0,sizeof(flag)); // Mark whether the element exists
memset(r,0,sizeof(r));
for(i=1;i<=m;i++){
scanf("%s",s);
if(mark==1){
flag[s[0]-'A']=flag[s[2]-'A']=1;
if(s[1]=='>'){
map[s[2]-'A'][s[0]-'A']=1; // Record the relationship of edges
r[s[0]-'A']++; // Record the degree of penetration
}
else{
map[s[0]-'A'][s[2]-'A']=1;
r[s[2]-'A']++;
}
for(j=0;j<n;j++)
rd[j]=r[j]; // Auxiliary space . Prevent topology sorting from changing the degree of penetration in the process
mark=tpsort();
if(!mark)
pos=i;
if(mark&&cnt==n){ // When there is no ring and the relationship is certain
mark=2;
pos=i;
t[cnt]=0; // Empty characters at the end of the character array
}
}
}
if(mark==0)
printf("Inconsistency found after %d relations.\n",pos);
else if(mark==1)
printf("Sorted sequence cannot be determined.\n");
else if(mark==2)
printf("Sorted sequence determined after %d relations: %s.\n",pos,t);
}
return 0;
}Copyright notice : This article is the original article of the blogger . Blog , Do not reprint without permission .
Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/116980.html Link to the original text :https://javaforall.cn
边栏推荐
猜你喜欢

Aardio - Method of batch processing attributes and callback functions when encapsulating Libraries

Aardio - 通过变量名将变量值整合到一串文本中

Aardio - 利用customPlus库+plus构造一个多按钮组件

CocosCreator+TypeScripts自己写一个对象池

视图(view)

Sword finger offer question brushing record 1

Heavyweight news | softing fg-200 has obtained China 3C explosion-proof certification to provide safety assurance for customers' on-site testing

Aardio - integrate variable values into a string of text through variable names

The nearest common ancestor of binary (search) tree ●●

每日一题:力扣:225:用队列实现栈
随机推荐
Windows Auzre 微软的云计算产品的后台操作界面
每日一题:力扣:225:用队列实现栈
如何用程序确认当前系统的存储模式?
Classification, function and usage of MySQL constraints
How to use flexible arrays?
The ceiling of MySQL tutorial. Collect it and take your time
MySQL ---- first acquaintance with MySQL
重磅新闻 | Softing FG-200获得中国3C防爆认证 为客户现场测试提供安全保障
自制J-Flash烧录工具——Qt调用jlinkARM.dll方式
柔性数组到底如何使用呢?
OpenNMS separation database
three.js绚烂的气泡效果
Spatial domain and frequency domain image compression of images
npm无法安装sharp
Applet system update prompt, and force the applet to restart and use the new version
Export MySQL table data in pure mode
Aardio - construct a multi button component with customplus library +plus
【雅思口语】安娜口语学习记录part1
剑指offer刷题记录1
Aardio - does not declare the method of directly passing float values